Javascript самовыполняющиеся функции и область видимости переменных
Может ли кто-нибудь объяснить мне это поведение?
var obj = function()
{
var _bar = 10;
function i_bar(){return ++_bar;}
return {
bar : _bar,
i_bar: i_bar
}
}();
obj.bar // prints 10, OK
obj.i_bar() // prints 11, OK
obj.bar = 0 // prints 0, OK
obj.i_bar() // prints 12, NOK
Поскольку единственная переменная _bar
не должен последний obj.i_bar()
напечатал 1
вместо 12
?
1 ответ
Решение
Ваш bar
это не те же ссылки, что и i_bar
ссылается. Типы значений не по ссылке, поэтому вы копируете bar
в возвращаемый объект, но это не bar
что ваша функция имеет в виду. Попробуй это:
var obj = function()
{
var self = this;
function i_bar(){return ++self.bar;}
self.bar = 10;
self.i_bar = i_bar;
return self;
}();