Javascript (函数(窗口){})和(函数(){})之间的差异

Javascript (函数(窗口){})和(函数(){})之间的差异,javascript,Javascript,以下两段代码之间有什么区别?我已经在模块模式、闭包和更高级别的函数声明中看到了这两种方法。两者的正确用途是什么 (function(){ })(); (function(window){ })(window); 在这种情况下,语义差异很小。但是,如果在整个代码中大量使用window,则将其别名为局部变量可以更好地缩小 (function (window) { window['foo'] = window['baz']; })(window); 可以缩小到 (function(w

以下两段代码之间有什么区别?我已经在模块模式、闭包和更高级别的函数声明中看到了这两种方法。两者的正确用途是什么

(function(){


})();



(function(window){


})(window);

在这种情况下,语义差异很小。但是,如果在整个代码中大量使用
window
,则将其别名为局部变量可以更好地缩小

(function (window) { window['foo'] = window['baz']; })(window);
可以缩小到

(function(w){w['foo']=w['baz']})(window)
如果没有本地别名,
窗口
将无法缩小,而将缩小

(function(){window['foo']=window['baz']})()

类似技巧还有其他原因和其他用例。看一看问题,找到更深入的解释。

在这种情况下,语义差异很小。但是,如果在整个代码中大量使用
window
,则将其别名为局部变量可以更好地缩小

(function (window) { window['foo'] = window['baz']; })(window);
(function(window){
})(window);
可以缩小到

(function(w){w['foo']=w['baz']})(window)
如果没有本地别名,
窗口
将无法缩小,而将缩小

(function(){window['foo']=window['baz']})()
类似技巧还有其他原因和其他用例。看一看问题,找到更深入的解释

(function(window){
})(window);
  • 现在,当您通过窗口
    (窗口)时这里,这是窗口对象,全局对象

  • 这是为该函数创建的窗口的本地副本

    (函数(窗口){
    })

  • 当你这样做的时候

    (函数(窗口){
    console.log(window.x)
    })

    您引用的是本地副本而不是全局副本,但它们仍然只保留对全局窗口对象的引用,因此最终您仍然访问默认窗口对象

  • 所以行为没有变化,但窗口对象是本地复制的

  • 现在,当您通过窗口
    (窗口)时这里,这是窗口对象,全局对象

  • 这是为该函数创建的窗口的本地副本

    (函数(窗口){
    })

  • 当你这样做的时候

    (函数(窗口){
    console.log(window.x)
    })

    您引用的是本地副本而不是全局副本,但它们仍然只保留对全局窗口对象的引用,因此最终您仍然访问默认窗口对象


  • 所以行为没有变化,但窗口对象是本地复制的。

    我认为它们的行为不会有任何不同。但是我不认为让变量(或函数参数)与内置对象(如
    窗口
    )同名是个好主意。通常你像
    (函数(w){})(窗口)那样做这样您就可以引用不同的变量。您将在一些Minimizer脚本中看到这一点。如果您进行jQuery开发,您应该遵循插件的模式<代码>(函数($){})(jQuery)为什么?因为没有冲突模式。我认为他们的行为不会有任何不同。但是我不认为让变量(或函数参数)与内置对象(如
    窗口
    )同名是个好主意。通常你像
    (函数(w){})(窗口)那样做这样您就可以引用不同的变量。您将在一些Minimizer脚本中看到这一点。如果您进行jQuery开发,您应该遵循插件的模式<代码>(函数($){})(jQuery)为什么?因为没有冲突模式。