-2

请解释为什么输出为 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

1 回答 1

0

您正在使用this.x的函数内部setTimeout,因此它正在打印4,但是,如果您不使用this.x它,它将打印1到控制台。您必须记住,**this**关键字在 JavaScript 中的行为与其他语言不同。在 JavaScript 中,of 的值**this**不是指使用它的函数或其作用域,而是主要由函数的调用上下文(context.function())和调用位置决定。

正如您在上面的示例**this**中看到的 setTimeout 函数并没有引用lexical scope该函数。但是引用,global scope因为它是函数的调用上下文。

于 2021-08-27T09:03:59.127 回答