首页 > 解决方案 > this 关键字如何在函数调用链上起作用?

问题描述

我在 Kyle Simpson 的“你不知道 JS 系列”中读到了这个关键字。在书中,他对this关键字解释的概念之一是默认绑定。函数对象中使用的 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。这是怎么发生的?

标签: javascriptthis

解决方案


无法将var aof绑定f2thisf1, var aoff2只是of范围内的一个局部变量f2,它与关键字无关,this因为它只是一个普通的局部变量。

你不懂JS中提到的隐式绑定,是最常用的this关键字使用方式。这本书的意思是该this关键字仅取决于使用点符号引用的对象,在您的示例中,由于f1在没有任何附加对象的情况下调用它,因此唯一可以应用于它的规则是默认绑定。


推荐阅读