0

有人可以向我解释这种行为吗?

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

4

1 回答 1

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;
}();
于 2013-09-06T16:30:58.077 回答