以下两段代码之间是否存在实际差异?

时间:2015-01-25 09:50:26

标签: javascript

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

1 个答案:

答案 0 :(得分:1)

是的,有区别......

在第一个示例中,您定义了具有一个参数的函数,您需要在闭包之外的上下文中使用myModulemyModule必须在那里定义)。

第一个例子更具功能性。这意味着,您可以在任何地方重用该方法,因为它不依赖于其外部上下文。您可以将该功能外包到库中。

第二个例子在很大程度上取决于它的包装功能,这有时会导致调试更加困难并避免可重用性。这就像访问全局变量一样,通常你不会做魔术......(如果你把这个变量包装在一个javascript对象中就没关系......这实际上取决于具体的情况)