web-dev-qa-db-fra.com

Syntaxe de la définition de la fonction Javascript

Duplicata possible:
JavaScript: var functionName = function () {} vs function functionName () {}
Déclaration de fonctions en JavaScript

J'ai vu 2 syntaxes différentes pour définir des fonctions en javascript:

function f() {
   ...
}

Aussi bien que

var f = function() {
    ...
};

Quelle est la différence entre ceux-ci? L'un d'eux est-il obsolète?

44
CaptainCodeman

Aucun des deux n'est obsolète et les deux fonctionneront. La différence ici est que l'une est une fonction nommée (function f()) tandis que l'autre est une variable égale à une fonction (var f = function()).

Vous devez être prudent lorsque vous définissez des variables égales à des fonctions. Cela fonctionnera:

var f = function(n) { console.log(n); };
f(3); // logs 3

Mais cela se cassera, puisque la variable est définie après l'appel à elle.

f(3); // what is f? breaks.
var f = function(n) { console.log(n); };

Mais les fonctions normales fonctionnent bien.

function abc(n) { console.log(n); }

abc(3); // logs 3
xyz(5); // logs 5

function xyz(n) { console.log(n); }

En effet, le code est analysé avant l'exécution et toutes les fonctions sont disponibles pour appeler. Mais définir un var égal à une fonction, c'est comme définir un var à autre chose. L'ordre dans lequel cela se produit est important.

Maintenant, pour des trucs plus confus ...

Il existe également des fonctions anonymes "auto-exécutables". Ils portent différents noms. La façon la plus courante de procéder ressemble à ceci:

(function() {
    // code in here will execute right away
    // since the () at the end executes this (function(){})
})();

Il existe également une version sans doute meilleure.

!function() {
    // again, the tailing () will execute this
}();

Découvrez ce post Stack Overflow pour en savoir plus sur les fonctions anonymes.

46
Marshall