Переоценены ли функции с именами при каждом вызове?
В этом примере:
function foo () {
function bar () {
return 'foo bar';
}
bar();
}
foo();
Повторяется ли bar
для каждого x раз, когда foo
вызывается?
И наоборот:
function bar () {
return 'foo bar';
}
function foo () {
bar();
}
foo();
Этот тест показывает, что более поздний пример на +/- 1.6x быстрее (в Chrome).
Если не переоценить, почему второй шаблон будет значительно быстрее первого паттерна?
Ответы
Ответ 1
Короткий ответ: Да.
Как упоминается в комментариях к вашему вопросу, все в теле функции запускается всякий раз, когда вы вызываете функцию.
Второй пример быстрее, потому что ему нужно только вызвать ранее инициализированную функцию, тогда как в первом примере код должен повторно инициализировать функцию каждый раз. В принципе, он должен повторять работу каждый раз, когда вызывается foo()
, что занимает дополнительное время обработки.