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)
{
//...
});
答案 0 :(得分:3)
(function() {
var win = this;
// do something with win
}).call(this);
Underscore是一个javascript库而不是DOM库,因此它不应该在任何地方使用窗口,因为javascript不是DOM而窗口是DOM api
使用这种方法,下划线并不依赖于DOM。试图在nodejs或rhino中调用窗口是行不通的,并没有任何意义。
编辑:
调用将函数的上下文设置为this(全局或窗口),因此不需要将任何内容作为参数传递。