【发布时间】:2018-08-07 22:58:53
【问题描述】:
我正在学习 this 关键字是如何工作的,我读到当一个函数被简单地调用,没有任何上下文对象或 new 关键字时,this关键字只是指 global/window 对象。但如果函数使用严格模式,则this关键字设置为undefined。所以我写了这段代码来看看它是如何工作的:
function foo(){
"use strict";
alert(this.a);
}
var a = "Global A";
var obj = {
a : "Object's A",
foo : foo
}
setTimeout(obj.foo, 1000);
我以为我会收到一个错误提示 Uncaught TypeError: Cannot read property 'a' of undefined。但令我惊讶的是,输出是 Global A。函数 foo() 是在严格模式下编写的。但是,this 关键字仍然指的是 global 对象。为什么输出是 Global A 而不是 TypeError ?
【问题讨论】:
-
可能是函数声明不是严格模式?请注意,您在这里松散了范围:
setTimeout(obj.foo, 1000) -
@JonasW。我认为如果函数体处于严格模式,则足以使 this 引用 undefined。但我不是 100% 确定:+
标签: javascript this