DDR爱好者之家 Design By 杰米
箭头函数不会创建自己的this,它只会从自己的作用域链的上一层继承this。
由于箭头函数没有自己的this指针,通过 call() 或 apply() 方法调用一个函数时,只能传递参数(不能绑定this),他们的第一个参数会被忽略。
前言
阅读下面的内容要先看下《你不知道的javascript(上)》中的第二部分:this和对象原型(里面对于this指向的理论部分主要来源于该书)。
问题
这周在写代码的时候,听同事在说箭头函数无法更改this的指向,并且使用下面代码进行验证:
// (1) 使用箭头函数,this一直指向window var a = 0 var obj1 = { a: 1, fn: () => { console.log(this.a) } } obj1.fn() // 结果:0 var obj2 = { a: 2 } obj2.fn = obj1.fn obj2.fn() // 结果:0
// (2)不使用箭头函数,this的指向会更改 var obj3 = { a: 3, fn: function() { console.log(this.a) } } obj3.fn() // 结果:3
第一段代码,无论fn绑定在哪个对象上,this.a始终指向全局的a(在非严格模式下的浏览器中我们可认为是window)
然而,这种说法是有问题(我认为)。
先理解this
this代表什么取决于:
- 调用位置
- 四种绑定规则
var a = 0 test() // 调用位置在此,通过【默认绑定规则】,可知test的this绑定到了window上 function test() { console.log(this) // this是window var obj1 = { a: 1, fn: function() { console.log(this) // this是obj1 console.log(this.a) } } obj1.fn() // 调用位置在此,通过【隐式绑定规则】,可知fn中的this绑定到了obj1上 var obj2 = { a: 2 } obj2.fn = obj1.fn obj2.fn() // 调用位置在此,【隐式绑定规则】,可知fn内的this绑定到了obj2 }
箭头函数中的this
其实这么起标题不太准确(然而想不出好的名字),因为箭头函数是不会创建自己的this的(MDN),那么下面代码的this是来源于哪里的呢?
var obj3 = { a: 3, fn: () => { console.log(this.a) } } obj3.fn() // 调用位置在此,this指向window
arrowFoo1() // (1)此处是调用位置,使用【默认的绑定规则】,this = window function arrowFoo1() { var obj1 = { vv: 'svv1', fn: () => { console.log(this.vv, 'vv的值是') } } // (2)调用位置是此处,若fn不是箭头函数,那么这里也会有自己的this(即【隐式调用规则】,this绑定为obj1),而fn是箭头函数,则它没有this,那么fn内部调用的this是谁? // 这时候需要根据作用域的规则,往外层查找,找到哪里?找到调用obj1.fn的调用栈,即arrowFoo1函数的this,那么从(1)中可知,那个this指向的是window obj1.fn() var obj2 = { vv: 'svv2', } obj2.fn = obj1.fn obj2.fn() } function arrowFoo2() { var vv = '哦哦哦哦哦' console.log(this.vv, 'vv的值是') }
因此,箭头函数里面要是用到了this,那么其实它是通过作用域链,往外进行查找的,找到了就直接返回咯。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
更新日志
2024年11月25日
2024年11月25日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]