javascript中的以下代码之间是否存在任何差异:
// assuming myModule is an object with some methods
(function(myVar){
...
//using myVar inside this function
var b = myVar.getB();
})(myModule);
和
// assuming myModule is an object with some methods
(function(){
var myVar = myModule;
...
var b = myVar.getB();
})();
在这两种情况下我都可以假设通过使用myVar,我实际上正在使用myModule对象..并且只要myVar没有在自执行匿名函数内部的内部函数中重新声明 - 这应该是相同的,isn不是吗?
答案 0 :(得分:1)
是的,有区别......
在第一个示例中,您定义了具有一个参数的函数,您需要在闭包之外的上下文中使用myModule
(myModule
必须在那里定义)。
第一个例子更具功能性。这意味着,您可以在任何地方重用该方法,因为它不依赖于其外部上下文。您可以将该功能外包到库中。
第二个例子在很大程度上取决于它的包装功能,这有时会导致调试更加困难并避免可重用性。这就像访问全局变量一样,通常你不会做魔术......(如果你把这个变量包装在一个javascript对象中就没关系......这实际上取决于具体的情况)