Javascript自执行函数和变量范围

时间:2013-09-06 16:23:25

标签: javascript scope self-executing-function

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

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 个答案:

答案 0 :(得分:1)

您的bari_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;
}();