IIFE在内部返回对象 - 引用内部或外部对象?

时间:2013-11-26 14:41:36

标签: javascript object reference scope iife

使用立即调用的函数表达式创建对象时,使用内部或外部对象引用之间是否存在实际差异?例如:

var external = (function(){
    var internal = {};
    internal.a = function(){
        //... do stuff
    }
    internal.b = function(){
        internal.a();
        // ^ OR v 
        external.a();
    }
    return internal;
})();

两者都有效。我可以想到的唯一区别是,如果没有直接调用它,可能会在调用后清除internal,但由于同一个对象存在于external中,这可能没有实际意义。如果有重复,请原谅我 - 我无法清楚地表达我想要了解的内容,以便搜索引擎给我一个明确的答案。

谢谢!

2 个答案:

答案 0 :(得分:3)

他们是完全相同的事情(正如@Pointy指出的那样,他们是相同的事情,直到有人在外面改变external,但是使用{{感觉很奇怪1}}这里,并不是很清楚因为你在它自己的定义中使用它。

答案 1 :(得分:1)

一个有趣的区别是对external的引用意味着包含外部var声明的词法范围将从对象内部固定。这可能被解释为内存泄漏,具体取决于对象发生的情况。