IIFE和窗口对象?

时间:2014-03-09 10:07:04

标签: javascript jquery

需要访问未覆盖的IIFE对象的

window可以看作:

类似于(jQuery示例):

$(function (global) {
  // do something with global
})( window );

但有时我也会看到这个(underscore.js):

(function() {
  var global= this;
  // do something with global
}).call(this);

问题1 :是否有任何的区别?如果是这样,我应该何时使用它们?

问题2 this 中的IIFE window。为什么有必要“发送”window / call(this)? (jQuery没有使用严格模式imho)

NB

看起来jQuery(自1.11.0 )也采用了这种模式:

(function (global, factory)
{
   //....

}(typeof window !== "undefined" ? window : this, function (window, noGlobal)
{
   //...
});

1 个答案:

答案 0 :(得分:3)

(function() {
  var win = this;
  // do something with win
  }).call(this);

Underscore是一个javascript库而不是DOM库,因此它不应该在任何地方使用窗口,因为javascript不是DOM而窗口是DOM api

使用这种方法,下划线并不依赖于DOM。试图在nodejs或rhino中调用窗口是行不通的,并没有任何意义。

编辑:

调用将函数的上下文设置为this(全局或窗口),因此不需要将任何内容作为参数传递。