js中箭头函数this指向问题

js中箭头函数this指向问题

都说箭头函数的this值是在函数定义时确定的,但我一直不清楚什么时候是定义的。
比如
在这里插入图片描述
这里打印的this是指向window的。但是定义的时候log不是定义在对象里面吗?

然后我看到箭头函数不创建自己的this值,而是继承最近的非箭头函数作用域的this。
我发现关键点在作用域上。
在JavaScript中,作用域主要由以下几种结构定义:

  • 全局作用域:这是最外层的作用域,任何不在函数内部或者严格模式下不在块级作用域(例如if语句块)内的变量都被认为是全局变量,它们属于全局作用域。

  • 函数作用域:每次调用函数时,都会创建一个新的作用域。函数内部定义的变量只能在该函数内部访问。

  • 块级作用域:ES6引入了let和const关键字,允许在块级作用域(例如if、for、while等代码块)内声明变量。这些变量只在它们被声明的块级作用域内可见。

  • 词法作用域:这是一种由函数定义的位置决定的作用域,无论函数在哪里被调用,它的词法作用域总是指向它被定义的地方。

  • 模块作用域:在ES6模块中,每个模块都有自己的作用域,模块内部定义的变量和函数默认是私有的,不能被其他模块直接访问。

因此可以理解对象本身不创建新的作用域,但是对象内部可以定义函数,这些函数可以访问定义它们时的作用域链上的变量。例如,对象方法中的this关键字会指向调用该方法的对象,但这个this并不是由对象本身创建的作用域,而是由函数调用的上下文决定的。
在这里插入图片描述
在这里插入图片描述
可以看到对象obj1中的this是全局,对象本身没有作用域

所有可以这么理解 箭头函数不创建自己的this值,而是继承上一级的 函数作用域 的this
在这里插入图片描述
可以看到箭头函数的this会是上一级函数obj.two的this
在这里插入图片描述
这里two任然是对象没有作用域,往上找,找到全局。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值