我在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。这是怎么发生的?
f1将记录全局this.a = 100,因为在f1中没有其他a赋值。由于您仍在f2()函数内部调用f1(),因此f1仍读取全局a,即100。如果您有f2(){a = 10};并称为f2();您将返回10。不要在f2函数内部调用f1(),但仍要记住包括console.log(this.a);在两个功能中。
var a=100;
是在全局范围内定义的变量,任何函数均可访问。var a=10;
是在f2
函数范围内定义的局部变量,仅在此函数内部可用。
[this.a
将全局变量引用为局部变量,f2
函数的范围中定义的变量在f1
中不可用