使用立即调用的函数表达式创建对象时,使用内部或外部对象引用之间是否存在实际差异?例如:
var external = (function(){
var internal = {};
internal.a = function(){
//... do stuff
}
internal.b = function(){
internal.a();
// ^ OR v
external.a();
}
return internal;
})();
两者都有效。我可以想到的唯一区别是,如果没有直接调用它,可能会在调用后清除internal
,但由于同一个对象存在于external
中,这可能没有实际意义。如果有重复,请原谅我 - 我无法清楚地表达我想要了解的内容,以便搜索引擎给我一个明确的答案。
谢谢!
答案 0 :(得分:3)
他们是完全相同的事情(正如@Pointy指出的那样,他们是相同的事情,直到有人在外面改变external
),但是使用{{感觉很奇怪1}}这里,并不是很清楚因为你在它自己的定义中使用它。
答案 1 :(得分:1)
一个有趣的区别是对external
的引用意味着包含外部var
声明的词法范围将从对象内部固定。这可能被解释为内存泄漏,具体取决于对象发生的情况。