JS. Простой пример замыкания функции

Говорят, что замыкание это функция плюс её окружение, но что это значит? Давайте разберем на примере.

Main.html

EventHandler.js

Итак, главная интрига данного кода – какую переменную выведет alert(result) – глобальную или локальную? Правильный ответ – локальную. Обратите внимание на следующие вещи…

  1. Внутри функции InternalFunction – есть переменная SomeVar, которая внутри этой функции не определена словом var. По факту это означает, что выводить в инструкции return нечего(undefined). Но не тут-то было….
  2. Интерпретатор начинает просматривать окружение. В данном случае функция вложена в функцию, значит первый круг поиска – посмотреть во внешней функции, итак, если найдено, значит можно продолжать обработку и далее все как обычно – мы получим результат LocalVar
  3. Если мы закомментируем строку во внешней функции

    то интерпретатор и тут не успокоится – он найдет переменную с таким именем, но она уже окажется глобальной.

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

This entry was posted in javascript. Bookmark the permalink.