function foo() {
console.log(this.a);
}
var a = 2;
(function() {
"use strict";
foo(); // 2
})();Run Code Online (Sandbox Code Playgroud)
我只是想知道,怎么调用foo()仍然给出值 2?我认为因为foo在IIFE内部被调用,然后this.a会评估为undefined,因为IIFE 中没有a变量。
“严格使用”适用于 IIFE,而不是foo()函数。结果,foo在草率模式/非严格模式下运行。由于foo()没有明确this绑定到它,它默认为全局对象,在浏览器中是window. 当你声明var a在全球范围内,它就会被添加到窗口对象的属性,利用意义this.a的foo里面会给你持有的价值a,因为它是访问a的性能window。
你会得到undefined的this检查foo()是在严格模式,而不是IIFE正在运行:
function foo() {
"use strict";
console.log(this); // undefined
console.log(this.a); // Crash
}
var a = 2;
(function() {
foo();
})();Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |