es6学习 深入学习箭头函数this指向及call原理

学习箭头函数的过程中遇到了问题 解决之后记录一下
参考资料:阮一峰 es6标准入门

箭头函数

箭头函数是一种写作方式十分简洁高效的函数 但对比其他函数有几点不同,比如箭头函数不能用作构造函数.
这恰恰是因为箭头函数的this指向问题,实际上箭头函数是没有this指针的,所以不能用作构造函数.在调用箭头函数的this时,导致内部的this就是外层代码块的this. (还有一点尤为重要 就是箭头函数的this指向是不可变的)
所以说箭头函数体内的this对象就是定义时所在的对象,而不是使用时所在的对象

验证程序

下面是我在学习过程中用作验证的程序
程序1:
请添加图片描述
①可以看到test为箭头函数 test2为普通函数 其外部代码块都为函数foo
根据上面所说 此时test的this即为foo的this 而因为函数提升 foo的this指向全局 所以直接执行foo函数 test函数打印为全局的变量id=21,而test2函数因为函数提升this也指向全局打印21
②使用call改变foo的this指向 此时test的this指向call传入的{id:0},打印0.test2仍然指向全局打印21.

③写出这个函数之后的思考中 一直想不明白为什么直接执行foo函数的话 test函数不打印0 其实是因为混淆了执行上下文和this对象 foo函数中的var id = 0 对本文理解this 对象没有作用

程序2:
请添加图片描述
当外部代码块为对象foo时,test此时this对象为全局(foo的this)
执行foo.test()和foo.test2时的实际步骤为test.call(foo),test2.call(foo)
但因为箭头函数this指针不允许被改变,所以test打印21,test2打印0

后半部分单独把函数体赋值给test3 和采用立即执行函数 均是为了验证foo.test2()的执行过程.

前端小白 欢迎提问与指正~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值