尝试正确地学习箭头函数内的'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 中它的值不是全局 window 而是全局对象呢?
this
。由于此箭头函数不在任何其他函数内部,其封闭作用域是全局的,因此其this
是全局对象。 - Robin Zigmond