IIFE中的“this”关键字上下文

function foo() {
  console.log(this.a);
}

var a = 2;

(function() {
  "use strict";

  foo(); // 2
})();

回答

“严格使用”适用于 IIFE,而不是foo()函数。结果,foo在草率模式/非严格模式下运行。由于foo()没有明确this绑定到它,它默认为全局对象,在浏览器中是window. 当你声明var a在全球范围内,它就会被添加到窗口对象的属性,利用意义this.a的foo里面会给你持有的价值a,因为它是访问a的性能window

你会得到undefinedthis检查foo()是在严格模式,而不是IIFE正在运行:

function foo() {
  "use strict";
  console.log(this); // undefined
  console.log(this.a); // Crash
}

var a = 2;

(function() {
  foo(); 
})();


以上是IIFE中的“this”关键字上下文的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>