Мой вопрос действительно больше касается области действия в JavaScript, а не закрытия.
Возьмем следующий код:
var f = function () {
var n = 0;
return function () {
return n++;
};
}();
console.log(f());
console.log(f());
Приведенный выше код выводит:
0
1
Как видно из приведенного выше кода, f
(самовызываемый) возвращает функцию, создавая замыкание n
.
Итак, он работает с анонимной функцией; таким образом, я попробовал это с именованной функцией:
var f2 = function () {
return n++;
};
var f = function () {
var n = 0;
return f2;
}();
console.log(f2()); // <= [n is not defined]
Код выше не работает, ошибка n is not defined
. Я предполагаю, что это проблема масштаба; но я не могу понять, почему именно;
Почему область видимости одинакова для анонимной внутренней функции, но не работает с именованной внешней функцией?
Кроме того, во втором примере я создаю замыкание?