Maison > interface Web > js tutoriel > le corps du texte

Exemples détaillés de la différence entre les littéraux de fonction javascript et les constructeurs Function()

伊谢尔伦
Libérer: 2017-07-27 16:58:52
original
2350 Les gens l'ont consulté

La différence entre le constructeur de fonction littéral et 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 d'une fonction récursive, vous pouvez l'appeler vous-même, en utilisant Function. ( ) le constructeur ne fonctionne pas. Le constructeur

var f = function fact(x) { 
if (x < = 1) return 1; 
else return x*fact(x-1);
};
Copier après la connexion

Function() permet la création et la compilation dynamiques de code Javascript au moment de l'exécution. 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.

Lors de la création d'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"); // 无法获取局部变量} 
alert(constructFunction()()); // 输出 "global" 函数直接量:
Copier après la connexion

Tant qu'il s'agit d'une syntaxe d'expression, l'hôte du script pensera que la fonction est une fonction directe. Si rien n'est ajouté, elle sera considérée comme une déclaration de fonction si elle commence par Write function. en une expression Dans la formule, comme les quatre opérations arithmétiques, l'hôte la traitera également comme une quantité directe, comme suit :

var a = 10 + function(){ 
return 5; 
}();
Copier après la connexion
(function(){ 
alert(1); 
} ) ( ); 
( function(){ 
alert(2); 
} ( ) ); 
void function(){ 
alert(3); 
}() 
0, function(){ 
alert(4); 
}(); 
-function(){ 
alert(5); 
}(); 
+function(){ 
alert(6); 
}(); 
!function(){ 
alert(7); 
}(); 
~function(){ 
alert(8); 
}(); 
typeof function(){ 
alert(9); 
}();
Copier après la connexion

Il existe de nombreuses façons de définir des fonctions en js, et la quantité directe de fonction en fait partie. Par exemple, var fun = function(){}, si la fonction n'est pas affectée à fun, alors c'est une fonction anonyme.

Regardez comment les fonctions anonymes sont appelées.

1. Appels de fonction qui obtiennent des valeurs de retour après l'exécution

//方式一,调用函数,得到返回值。强制运算符使函数调用执行 
(function(x,y){ 
alert(x+y); 
return x+y; 
}(3,4)); 
//方式二,调用函数,得到返回值。强制函数直接量执行再返回一个引用,引用在去调用执行 
(function(x,y){ 
alert(x+y); 
return x+y; 
})(3,4);
Copier après la connexion

2. Ignorer les valeurs de retour après l'exécution

//方式三,调用函数,忽略返回值 
void function(x) { 
x = x-1; 
alert(x); 
}(9);
Copier après la connexion

Eh bien, regardez enfin la mauvaise façon d'appeler

//错误的调用方式 
function(x,y){ 
alert(x+y); 
return x+y; 
}(3,4);
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!