1. Qu'est-ce qu'une fonction anonyme ?
Il existe généralement trois façons de définir une fonction en Javascript :
Instruction de mot-clé de fonction (fonction) :
function fnMethodName(x){alert(x);}
Fonction littéraux :
var fnMethodName = function(x){alert(x); }
Constructeur Function() :
var fnMethodName = new Function('x','alert(x);')
Les trois méthodes ci-dessus définissent la même fonction de méthode fnMethodName, la première est la plus Méthode couramment utilisée, les deux dernières copient une fonction dans la variable fnMethodName, et cette fonction n'a pas de nom, c'est-à-dire une fonction anonyme. En fait, de nombreux langages ont des fonctions anonymes.
2. La différence entre le littéral de fonction et le constructeur Function()
Bien que le littéral de fonction soit une fonction anonyme, la syntaxe vous permet de spécifier n'importe quel nom de fonction lors de l'écriture de A. La fonction récursive peut s'appeler elle-même, mais l'utilisation du constructeur Function() ne le peut pas.
var f = function fact(x) {
if (x < = 1) return 1;
else return x*fact(x-1);
}
Le constructeur Function() autorise le code Javascript d'exécution. création et compilation de dynamiques. En cela, elle est similaire à la fonction globale eval().
Le constructeur Function() analyse le corps de la fonction et crée un nouvel objet fonction à chaque fois qu'il est exécuté. Par conséquent, l’efficacité de l’appel du constructeur Function() dans une boucle ou une fonction fréquemment exécutée est très faible. En revanche, les littéraux de fonction ne sont pas recompilés à chaque fois qu'ils sont rencontrés.
Lorsque vous créez une fonction à l'aide du constructeur Function(), elle ne suit pas la portée typique. Elle l'exécute toujours en tant que fonction de niveau supérieur.
var y = "global" function constructFunction () {
var y = "local";
return new Function("return y"); // Impossible d'obtenir la variable locale
}
alert(constructFunction()() ); // Sortie "globale"
Par rapport à la définition du mot-clé de fonction, le constructeur Function() a ses propres caractéristiques et est beaucoup plus difficile à utiliser, cette technique est donc généralement rarement utilisée. L’expression littérale de fonction est très proche de la définition du mot-clé de fonction. Compte tenu de la différence précédente, bien qu'il y ait des nouvelles selon lesquelles les fonctions anonymes littérales ont des bogues dans certains moteurs de webkit sous OS X 10.4.3, les fonctions anonymes auxquelles nous faisons habituellement référence font référence à des fonctions anonymes sous la forme de littéraux de fonction. Pour plus de détails, vous pouvez lire le chapitre Fonctions de "JavaScript: The Definitive Guide, 5th Edition".
3. Modèles de code de fonctions anonymes
Hier, hedger wang a présenté plusieurs modèles de code de fonctions anonymes sur son blog : Modèle d'erreur : Ça ne peut pas fonctionner, le Le navigateur signalera une erreur de syntaxe.
function(){
alert( 1);
}();
Fonction littérale : déclarez d'abord un objet fonction, puis exécutez-le.
(function(){
alerte (1) ;
} ) ( );
Expression prioritaire : Puisque Javascript exécute les expressions de l'intérieur des parenthèses vers l'extérieur, vous pouvez utiliser des parenthèses pour forcer l'exécution de la fonction déclarée. .
( function(){
alerte (2) ;
} ( ) );
Opérateur Void : utilisez l'opérateur void pour exécuter un seul opérande non entouré de parenthèses.
Copier le code Le code est le suivant :
void function(){
alert(3);
}()
Ces trois méthodes sont équivalentes, hedger wang préfère la troisième pour des raisons personnelles. Il existe 3 types, mais dans les applications réelles, ce que je vois et utilise est le premier type.
4. Application de fonctions anonymes La première phrase de "
Un mode module de Javascript" est "Les variables globales sont le diable". Combinées au mot-clé var, les fonctions anonymes peuvent garantir efficacement que Javascript est écrit sur la page sans polluer les variables globales. Ceci est très efficace et élégant lors de l'ajout de Javascript à une page inconnue. En fait, les fonctions anonymes sont largement utilisées dans YUI et ses paradigmes correspondants, et sont également largement utilisées dans d'autres bibliothèques Javascript.
Javascript est la pierre angulaire de la programmation fonctionnelle. Pour plus de détails, veuillez consulter «
Écrire un beau JavaScript avec des techniques de programmation fonctionnelle » et «
Guide de programmation JavaScript fonctionnel ».