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

时间:2015-01-09 05:57:30

标签: javascript

以下两个代码段之间有什么区别?我已经看到用于模块模式,闭包和更高级别的函数声明。适合两者的用途是什么?

(function(){


})();



(function(window){


})(window);

2 个答案:

答案 0 :(得分:3)

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

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

可以缩小为

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

如果没有本地别名,则window无法缩小,而缩小将改为

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

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

答案 1 :(得分:1)

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

  2. 这是为该功能创建的窗口的本地副本。

    (function(window){ })

  3. 执行此操作时,

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

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

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