объявление функции быстрее, чем выражение функции? - PullRequest
14 голосов
/ 25 марта 2011

Объявление ч / б разницы функций и выражение функции прекрасно описаны в var functionName = function () {} против функции functionName () {}
В этом упоминается, что объявление функции оцениваетсяво время синтаксического анализа & выражение функции вычисляется на этапе выполнения

В bytes.com упоминается, что объявление функции выполняется быстрее, чем выражение функции.

Я создалбазовый тестовый пример для этого: http://jsperf.com/function-declaration-vs-function-expression

Объявление функции :

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

Выражение функции :

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

Тест показал, что выражение функции на 90% медленнее, чем объявление функции .

Почему такая разница в скорости?

Редактировать :
По результатам http://jsperf.com/function-declaration-vs-function-expression

In Chrome, IE9, Opera & Safari -> Объявление функции быстрее, чем выражение функции

В Firefox, IE7, IE8 -> Выражение функции быстрее, чем объявление функции

In IE9 FuОбъявление nction быстрее, тогда как в IE 7 и 8 выражение функции быстрее. Это из-за изменений в движке JavaScript в IE9, или этот шаг был преднамеренным?

Ответы [ 2 ]

2 голосов
/ 25 марта 2011

Firefox также имеет нестандартный Function Statements, что позволяет условно выбирать между объявлениями функций (согласно спецификации, вы не можете).Просто используя пример Юрия "kangax" Зайцева :

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

Таким образом, они компилируются во время выполнения, а не в фазе разбора:

Операторы функций НЕ объявляются во время создания переменных.Они объявляются во время выполнения, точно так же, как выражения функций.

Другие браузеры, вероятно, будут предварительно компилировать объявления функций, заставляя их работать быстрее во время выполнения, но Firefox должен интерпретировать объявления функций во время выполнения,не вызывает большой разницы между скоростью объявления функций и выражений функций в браузерах на основе Gecko.

1 голос
/ 25 марта 2011

Это должно зависеть от браузера. Некоторые браузеры могут компилировать javascript по-разному, если это выражение, а не объявление, а некоторые могут обращаться с ними точно так же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...