请解释为什么输出为 4。我试图理解输出为 4,但找不到不是 3 的原因。
var x=4,
obj={
x: 3,
bar:function(){
var x = 2;
setTimeout(function(){
var x=1;
console.log(this.x);
},1000);
}
}
obj.bar();
请解释为什么输出为 4。我试图理解输出为 4,但找不到不是 3 的原因。
var x=4,
obj={
x: 3,
bar:function(){
var x = 2;
setTimeout(function(){
var x=1;
console.log(this.x);
},1000);
}
}
obj.bar();
您正在使用this.x
的函数内部setTimeout
,因此它正在打印4
,但是,如果您不使用this.x
它,它将打印1
到控制台。您必须记住,**this**
关键字在 JavaScript 中的行为与其他语言不同。在 JavaScript 中,of 的值**this**
不是指使用它的函数或其作用域,而是主要由函数的调用上下文(context.function())
和调用位置决定。
正如您在上面的示例**this**
中看到的 setTimeout 函数并没有引用lexical scope
该函数。但是引用,global scope
因为它是函数的调用上下文。