用(function(){…}).call(this)包装文件,而用简单的()包装调用

Wrapping a file with (function() { … }).call(this) versus a call with simply ()

本文关键字:包装 调用 文件 简单 call function this      更新时间:2023-12-09

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在函数中与调用时在作用域中相同,第二个则指窗口对象。