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)代码>为什么?因为没有冲突模式。