Есть ли разница в использовании памяти между анонимными функциями и традиционными функциями в Javascript? если да, то как?
Есть ли разница в использовании памяти между анонимными и обычными функциями в Javascript?
Если так, то как? Вы можете это объяснить?
1 ответ
Если под "нормальными функциями" вы подразумеваете функции, объявленные как function a(){
на корневом уровне вашего скрипта, то есть функции, прикрепленные к объекту окна, да, есть различия:
- функции, прикрепленные к объекту окна, не обрабатываются, в то время как анонимные функции могут быть обработаны, как только вы их больше не используете.
- они могут замедлить доступ к другим переменным объекта окна (присоединение функции на корневом уровне иногда квалифицируется как "загромождение глобального пространства имен", но причина, по которой этого не происходит, состоит в основном в том, чтобы иметь более чистый код и избегать конфликтов имен).
- анонимные функции - это замыкания: они хранят указатель на свою ограничивающую область, что позволяет использовать переменные, определенные в этой области. Побочным эффектом является то, что эта область не может быть одета перед функцией, поэтому функция может быть тяжелее, чем вы думаете, и чем "обычная функция" (вы можете добавить пустую область, чтобы заключить анонимное объявление и предотвратить этот эффект, если вы этого не сделаете Мне нужны переменные области видимости, но, поскольку я не знаю, могут ли движки javascript оптимизировать часть охватывающей области, я предлагаю не делать этого, если вы не обнаруживаете циклические ссылки).
Но эти различия, как правило, незначительны, обычно вам не нужно обращать на это внимание. На большинстве ваших страниц ваши анонимные функции все равно не будут одеты, так как вы не удаляете обработчик событий (обычно это первая причина анонимных функций).
Во всем мире (преждевременная оптимизация является основной и т. Д.) Я рекомендую вам отдавать предпочтение удобочитаемости, если у вас нет проблем с нарядами. Движки Javascript и их GC сильно меняются, поэтому ваши усилия могут оказаться бесполезными.
У Google есть интересное уведомление о закрытии и памяти.