此关键字如何在函数调用链上起作用?

问题描述 投票:0回答:2

我在Kyle Simpson的“您不知道JS系列”中读过this关键字。在这本书中,他在this关键字上解释的概念之一是Default Binding。。在函数对象中使用的this关键字基于函数的调用位置。如果函数调用发生在全局范围内,则被调用函数中使用的this关键字表示全局范围。考虑示例,

var a=100;

function fun(){
    var a=10;
    console.log(this.a);
}

fun();   // outputs 100

现在,我正试图更好地理解并尝试了该示例,

var a=100;

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

function f2(){
   var a=10;
    f1();
}

f2();         // outputs 100 and not 10. Why?

由于对函数f1的调用发生在函数f2的上下文中,所以我认为函数f1中的this.a可能输出为10。但是相反,它输出为100。这是怎么发生的?

javascript this
2个回答
0
投票

f1将记录全局this.a = 100,因为在f1中没有其他a赋值。由于您仍在f2()函数内部调用f1(),因此f1仍读取全局a,即100。如果您有f2(){a = 10};并称为f2();您将返回10。不要在f2函数内部调用f1(),但仍要记住包括console.log(this.a);在两个功能中。


0
投票

var a=100;是在全局范围内定义的变量,任何函数均可访问。var a=10;是在f2函数范围内定义的局部变量,仅在此函数内部可用。

[this.a将全局变量引用为局部变量,f2函数的范围中定义的变量在f1中不可用

© www.soinside.com 2019 - 2024. All rights reserved.