Подтвердить что ты не робот

Производительность вложенных функций Javascript

У меня есть некоторые вложенные функции, такие как

var freak = function() {
    var die = function() { ... }
    die(this);
}

Насколько я узнал, функция die будет создаваться (распределяться) каждый раз при вызове freak.

Поэтому, если freak получает много времени, это означает, что большая часть памяти будет потрачена впустую (предполагается, что die не использует ничего из контекста freak, другими словами, он отлично работает, даже если это выделяется только один раз и разделяется между несколькими вызовами freak - вот что я имел в виду впустую).

Правильно ли я понимаю? И нужно ли это полностью исключать вложенные функции?

4b9b3361

Ответ 1

Насколько я узнал, функция die будет создаваться (распределяться) каждый раз, когда вызывается freak.

Да. Это правда. Создается новый функциональный объект.

Поэтому, если freak получает много времени, это означает, что большая часть памяти будет потрачена впустую [...]

Для очень маленького и обычно несущественного значения "потрачено впустую".

В наши дни двигатели JavaScript очень эффективны и могут выполнять множество трюков/оптимизаций.

Например, только функциональный объект (но не фактический код функции!) должен быть "дублирован" внутри.

[...] ли это означает, что вложенные функции следует полностью исключить?

Нет. Существует проблема нет "потерять" без фактического тестового сценария, который показывает иначе. Эта идиома (вложенных и анонимных функций) очень распространена в JavaScript и очень хорошо оптимизирована для.

Вложенные функции предоставляют множество преимуществ, включая самодокументирующий код, небольшие автономные лексические области и другие преимущества изоляции/организации кода.