Skip to content

Latest commit

 

History

History
38 lines (22 loc) · 1.92 KB

File metadata and controls

38 lines (22 loc) · 1.92 KB

Déclaration des fonctions et expressions

Les fonctions en JavaScript sont des objets de première classe. Cela signifie qu'elles peuvent être passées comme toute autre valeur. Une utilisation courante de cette caractéristique est de passer une fonction anonyme comme une fonction de rappel "callback" qui peut être asynchrone.

La déclaration function

function foo() {}

La fonction ci-dessus est hissée "hoisted" avant le démarrage du programme; ainsi, elle est donc disponible partout dans la portée "scope" d'application où la fonction a été définie, même si appelé avant sa définition dans le code source.

foo(); // Fonctionne car foo a été crée avant l'exécution de ce code
function foo() {}

L'expresssion function

var foo = function() {};

Cet exemple attribue une fonction anonyme et sans nom à la variable foo.

foo; // 'undefined'
foo(); // provoque un erreur de type TypeError
var foo = function() {};

En raison du fait que var est une déclaration qui hisse le nom de la variable foo avant que l'exécution réelle du code ne commence, foo est déjà déclarée lorsque le script est exécuté.

Mais comme les assignements ne se produisent qu'au moment de l'exécution, la valeur de foo sera par défaut mise à undefined avant l'exécution du code.

L'expression de fonction nommée

Un autre cas est l'attribution de fonctions nommées.

var foo = function bar() {
    bar(); // Works
}
bar(); // erreur de reference ReferenceError

Ici, bar n'est pas disponible dans la portée externe "outer scope", puisque la fonction est seulement assignée à foo, mais elle est disponible à l'intérieur de bar. Cela est dû à la méthode de résolution de noms de JavaScript: le nom de la fonction est toujours disponible dans la portée locale "local scope" de la fonction elle-même.