javascript - 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。这是怎么发生的?
解决方案
无法将var a
of绑定f2
到this
f1, var a
off2
只是of范围内的一个局部变量f2
,它与关键字无关,this
因为它只是一个普通的局部变量。
你不懂JS中提到的隐式绑定,是最常用的this
关键字使用方式。这本书的意思是该this
关键字仅取决于使用点符号引用的对象,在您的示例中,由于f1
在没有任何附加对象的情况下调用它,因此唯一可以应用于它的规则是默认绑定。
推荐阅读
- html - 如何使用R替换目录中所有HTML文档部分中的代码
- python - 在 Azure 中创建订阅的 Python 代码
- mongodb - --replSet 用于 mongodb 的目的是什么?
- node.js - ReferenceError:产品未定义
- assembly - 汇编程序可以在 1byte 寄存器上使用 movw 指令吗?
- java - AST 方法解析中的 java.lang.IllegalArgumentException
- c# - 在 ASP.NET Web 表单上显示不断变化的值
- python - pandas cx_Oracle 查询结果
- c# - 从 json 转换为 List