.call(this)和()之间在立即自调用函数上的差异

时间:2017-11-14 16:08:45

标签: javascript angularjs self-invoking-function

我在我们的一个在线AngularJS应用程序中遇到了这个代码,并想知道这是做什么的。它与仅使用括号调用立即自调用函数不同。

(function() {

}).call(this); // What was in TFS

VS

(function() {

})(); // Are these the same?

将一方呼叫另一方有什么好处,还是仅仅是编码偏好?

1 个答案:

答案 0 :(得分:4)

他们非常不同。第一个使用当前this的任何内容(在全局范围内,this是对全局对象的引用;在其他范围中,它可以是任何事物)。第二个将使用默认的this,它是在松散模式下对全局对象的引用,但在严格模式下是undefined

无端的例子:-):

console.log("At global scope:");
(function() {
  console.log(this === window); // true
}).call(this); // What was in TFS
(function() {
  console.log(this === window); // true
})();
(function() {
  "use strict";
  console.log(this === window); // false (this === undefined)
})();

console.log("Not at global scope:");
(function() {
  (function() {
    console.log(this === window); // false
  }).call(this); // What was in TFS
  (function() {
    console.log(this === window); // true
  })();
}).call({});// Using something other than the default
.as-console-wrapper {
  max-height: 100% !important;
}