Javascript 自执行函数和变量作用域

Javascript self executing functions and variable scope

本文关键字:变量 作用域 函数 执行 Javascript      更新时间:2023-09-26

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

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吗?

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