(function(window){}) 和 (function(){}) 之间的区别

Difference between (function(window){}) and (function(){})

本文关键字:function 区别 window 之间      更新时间:2023-09-26

以下两个代码片段有什么区别?我已经看到两者都用于模块模式,闭包和更高级别的功能声明。两者的正确用途是什么?

(function(){

})();

(function(window){

})(window);

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

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

可以缩小为

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

如果没有本地别名,window就无法减少,而是

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

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

(function(window){
})(window);
  1. 现在,当您在此处传递窗口(window);时,这是窗口对象,全局对象。

  2. 这是为该函数创建的窗口的本地副本。

    (function(window){ })

  3. 当你这样做时,

    (function(window){ console.log(window.x) })

    您引用

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

因此,行为没有变化,但窗口对象是本地复制的。