Les deux notations sont fonctionnellement équivalents.
Vous pouvez supposer que:
function a() {}
function b() {}
est interprété comme:
var a, b;
a = function a() {};
b = function b() {};
C'est pourquoi vous n'avez pas à déclarer- (définit pas!) avant utilisation. Vous pouvez réattribuer des fonctions après que vous avez défini, tout comme vous le feriez avec une variable. Fonctions se hisser tout comme les variables, car ils sont variables (de l'esprit=soufflé? bon!!!).
Déclarer avant utilisation
function a() { b(); } // using b before it's declared?
function b() {}
devient:
var a, b;
a = function a() { b(); }; // nope! b is declared, we're good
b = function b() {};
La redéfinition d'une fonction
function a() { alert("a"); }
a = function b() { alert("b"); }; // that's weird!
devient:
var a;
a = function a() { alert("a"); };
a = function b() { alert("b"); }; // oh, that looks normal
Déclarer vs définir
Déclarer est: var x
. En anglais: "je vais être en utilisant la variable x
".
Définir est: x = 5
. En anglais "Variable x
a maintenant la valeur 5
".
Déclarer avant utilisation est obligatoire et forcée, en "use strict"
. Définir avant utilisation n'est pas nécessaire. Si vos variables sont définies dans l'exécution vous êtes bon.
Donc, var x = 5
est à la fois un acte de déclaration et d'une définition, qu'est - function a() {}
.
Quand utiliser la notation?
Je vous conseille d'utiliser la fonction d'expression de la notation (var a = function () {}
) seulement quand vous avez sont réaffectés la valeur de a
plus tard. La fonction de l'expression des signaux, puis pour le lecteur qu' a
va obtenir réaffectés, et que c'est intentionnel.
Un autre (mineur) argument de la fonction d'expression de la notation est un chiffon outil comme JSLint qui pourrait vous obliger à déclarer (définit pas!) vos fonctions avant de les utiliser. Si vous avez des fonctions avec une définition récursive, c'est à dire. a
des appels b
et b
des appels a
, vous ne pouvez pas déclarer l'un avant l'autre à l'aide de la déclaration de la fonction de la notation.
Il est recommandé de ne pas le nom d'une fonction anonyme comme le nom peut substituer accidentellement d'une fonction existante.
var a = function () { alert("a"); };
var b = function a() { alert("b"); };
a(); // prints "b" and it is unclear whether that is intended, so avoid it