【发布时间】:2014-04-12 10:03:54
【问题描述】:
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 没有使用严格模式恕我直言)
注意
看起来 jQuery(自 1.11.0)也采用了这种模式:
(function (global, factory)
{
//....
}(typeof window !== "undefined" ? window : this, function (window, noGlobal)
{
//...
});
【问题讨论】:
-
在某些 JS 环境中可能没有
window变量……而thisworks even in strict mode -
@Bergi 所以他们可以这样做:
$(function (global){ // do something with global })( this );....no ? -
@Bergi 你能帮我找到The DOCS 在哪里说IIFE 中的上下文是全局对象吗? (我找不到)
-
不一定在 IIFE 内部(通过普通调用逻辑它是 determined),但 global
this(作为参数传递给.call())是 always 全局对象。 -
@Bergi 你是在告诉我当我做
f()它实际上运行f.call吗?
标签: javascript jquery