Вот коды:JavaScript закрытие и сфера
function fn() {
var x = 1;
function fn2() {
x++;
console.log(x);
}
return fn2;
}
var foo = fn();
var bar = fn();
foo(); //2
bar(); //2
foo(); //3
У меня проблема, что я не могу понять, почему результат не .Я имею в виду, согласно принципу закрытия, foo и bar должны поддерживать объем функции fn, поэтому я думал, что foo и bar имеют одинаковые x. Надеюсь, вы поможете мне решить проблему.
Я озадачен. На что это должно ссылаться здесь? Это будет 'undefined' в строгом режиме, а в противном случае - оконный объект. Это то же самое, что и объявление глобальной переменной 'x'. Кроме того, я предполагаю, что вы имеете в виду «каждый раз, когда' fn() '** называется **, а не« назначен ». –
' this.x' будет делать 'x' глобальным. Это как если бы' x' был определен вне ' fn' (глобально). Итак, мы больше не говорим о закрытии. –
Да, я возился и понял, что вы абсолютно правы. Вернитесь к чертежной доске ... – Snowmonkey