Déclaration de fonction plus rapide que l'expression de fonction?

La différence de déclaration de la fonction b / w et l'expression de la fonction sont magnifiquement décrites dans var functionName = function () {} vs function functionName () {}
Dans ce cas, il est mentionné que la déclaration de fonction est évaluée pendant le temps d'analyse, et l'expression de la fonction est évaluée dans la phase d'exécution

Dans bytes.com, il est mentionné que la déclaration de la fonction est plus rapide que l'expression de la fonction.

J'ai créé un cas de test de base pour ceci: http://jsperf.com/function-declaration-vs-function-expression

Déclaration de fonction :

function myfunc() { alert("yo"); } myfunc(); 

Expression fonctionnelle :

 var myfunc = function() { alert("yo"); } myfunc(); 

Le test a montré que l'expression de fonction est 90% plus lente que la déclaration de fonction .

Pourquoi une telle différence de vitesse?

Modifier :
À partir des résultats dans http://jsperf.com/function-declaration-vs-function-expression

Dans Chrome, IE9, Opera & Safari -> Déclaration de fonction est plus rapide que l'expression fonctionnelle

Dans Firefox, IE7, IE8 -> Expression fonctionnelle est plus rapide que la déclaration de fonction

Dans IE9, la déclaration de fonction est plus rapide, alors que dans IE 7 et 8, l'expression de la fonction est plus rapide. Est-ce en raison de la modification du moteur de JavaScript dans IE9, ou ce mouvement a-t-il été intentionnel?

Firefox a également des Function Statements non standard, ce qui permet de choisir entre conditionnellement les déclarations de fonction (par spécification, vous ne pouvez pas). En utilisant simplement un exemple de Juriy "kangax" Zaytsev :

 if (true) { function foo(){ return 1; } } else { function foo(){ return 2; } } foo(); // 1 // Note that other clients interpet `foo` as function declaration here, // overwriting first `foo` with the second one, and producing "2", not "1" as a result 

Donc, ceux-ci sont compilés au moment de l'exécution, au lieu de la phase d'analyse:

Les instructions de fonction ne sont PAS déclarées pendant l'instanciation variable. Ils sont déclarés en cours d'exécution, tout comme les expressions de la fonction.

D'autres navigateurs préfèrent pré-compiler les déclarations de la fonction, ce qui les rend plus rapides au moment de l'exécution, mais Firefox doit interpréter les déclarations de fonction au moment de l'exécution, ce qui ne cause pas beaucoup de différence entre la vitesse des déclarations de fonctions et les expressions de fonctions dans les navigateurs basés sur Gecko.

Marco citadinMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM Certains navigateurs peuvent compiler le javascript différemment si c'est une expression plutôt qu'une déclaration et certains peuvent les traiter exactement de la même manière.