【发布时间】:2020-05-05 02:57:38
【问题描述】:
尝试正确学习箭头函数内的“this”关键字。
在阅读和观看了一些视频后,我了解到使用常规函数时,只要调用该函数,就会定义“this”关键字。
无论你在哪里构建该函数,箭头函数内的“this”都将根据“this”的值进行定义。
所以我打开控制台,玩了两个对象和两个函数。
我这样做了:
const reg = {
reg1: "reg1",
reg2: {
reg3: 'reg3',
regFunc: function(){console.log(this)}
}
}
const arrow = {
arrow1: "arrow1",
arrow2: {
arrow3: 'arrow3',
arrowFunc: () => {console.log(this)}
}
}
reg.reg2.regFunc()
VM712:5 {reg3: "reg3", regFunc: ƒ}
arrow.arrow2.arrowFunc()
VM712:13 Window {parent: Window, opener: null, top: Window, length: 1, frames: Window, …}
对于 reg 对象,我得到了它,因为它是在它显示给我的 reg2 对象内部调用的。
但是对于箭头对象,箭头函数中的 this 关键字是在箭头内部的 arrow2 对象中创建的。
那么为什么它的值不在箭头对象arrow2中呢?为什么是全局窗口?
【问题讨论】:
-
因为箭头函数采用了它们周围(函数)范围的
this。由于这个箭头函数不在任何其他函数内,它的封闭范围是全局的,因此它的this是全局对象。
标签: javascript