backbone.js源代码使用了一个函数包装器,如下所示:
(function(){
...
}).call(this);
如在http://backbonejs.org/docs/backbone.html#section-185.
更常见的情况是,我看到以下内容被使用:
(function(){
...
})();
这两者的行为在什么时候不同?我认为它们是等效的,但我认为Backbone使用.call(this)
而不是较短的替代方案,这一定有区别。
在第一个示例中,函数内部的this
将是来自调用范围的this
。
在第二个示例中,this
将是window
。
(正如Šime Vidas所指出的,它是严格模式下的undefined
,而不是window
。)
第一个this
在函数中与调用时在作用域中相同,第二个则指窗口对象。