Déclaration de fonction
Expression d'affectation de fonction
Expression d'affectation de fonction nommée
Les fonctions sont des objets de première classe en JavaScript, ce qui signifie qu'elles peuvent être transmises comme n'importe quelle autre valeur. Un usage courant consiste à transmettre une fonction anonyme en tant que fonction de rappel dans une fonction asynchrone.
Déclaration de fonction
function foo() {}
La méthode ci-dessus sera analysée (histée) avant l'exécution, elle existe donc n'importe où dans le contexte actuel, même si elle est appelée au-dessus du corps de définition de la fonction C'est vrai aussi.
foo(); // 正常运行,因为foo在代码运行前已经被创建 function foo() {
Expression d'affectation de fonction
var foo = function() {};
Cet exemple attribue une fonction anonyme à la variable foo.
foo; // 'undefined' foo(); // 出错:TypeError var foo = function() {};
Puisque var définit une instruction de déclaration, la variable foo est analysée avant l'exécution du code, donc la variable foo a déjà été définie lors de l'exécution du code.
Mais comme l'instruction d'affectation n'est exécutée qu'au moment de l'exécution, la valeur de foo est par défaut indéfinie avant que le code correspondant ne soit exécuté.
Expression d'affectation d'une fonction nommée
Un autre cas particulier consiste à attribuer la fonction nommée à une variable.
var foo = function bar() { bar(); // 正常运行 } bar(); // 出错:ReferenceError
bar est invisible en dehors de la déclaration de fonction, car nous avons attribué la fonction à foo cependant, elle est toujours visible à l'intérieur de bar ; Cela est dû au traitement de dénomination de JavaScript. Les noms de fonctions sont toujours visibles dans les fonctions.
Remarque : dans les navigateurs IE8 et inférieurs, bar est également visible en externe. Cela est dû au fait que le navigateur analyse de manière incorrecte l'expression d'affectation de fonction nommée et l'analyse en deux fonctions foo et bar
.
Ce qui précède est le contenu de la série avancée JavaScript - déclarations et expressions de fonctions. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !