У меня следующий код js.
var a = (function(){
var x = 0;
var y = function(){
x++;
console.log(x);
}
var z = function(){
return x;
}
return {
x, y, z
}
})();
Здесь, когда я пытаюсь получить доступ к a.x
в первый раз, это дает мне вывод 0
(который ожидается, так как x инициализируется как 0) Затем я увеличиваю значение x
с помощью функции y
.Но после увеличения значения x
в два раза (или, возможно, более чем в 2 раза), когда я пытаюсь получить доступ к значению x
, это все равно дает мне a.x=0
.Я не могу понять, почему это происходит, поскольку я уже изменяю значение x
с помощью функции y
.Тогда почему это не меняется.
(Но когда я получаю доступ к значению x через какую-то функцию, это дает увеличенное значение. Почему это другое поведение. Если к той же переменной, к которой у меня есть прямой доступ, то это даст некоторый выводи когда то же самое значение переменной, которое я возвращаю через какую-то функцию, оно дает другое значение. Почему?)
var a = (function(){
var x = 0;
var y = function(){
x++;
console.log(x);
}
var z = function(){
return x;
}
return {
x, y, z
}
})();
console.log(a.x);
a.y();
a.y();
console.log(a.x);
console.log(a.z());
I думаю, это из-за закрытия, но не уверен в этом.