美文网首页前端开发知识分享
箭头函数的this指向问题-一看就懂

箭头函数的this指向问题-一看就懂

作者: 前端_java爱好者 | 来源:发表于2020-04-27 16:46 被阅读0次
1.jpg
OK,对于箭头函数的this
用一句话概括:箭头函数中的this指向的是定义时的this,而不是执行时的this。
    如果上面这句话听的是懂非懂或者完全不懂的,没关系,下面会有案例讲解。

举个栗子

    来看看this的一个使用案例:

    //定义一个对象
    var obj = {
        x:100, //属性x
        show(){
        //延迟500毫秒,输出x的值
            setTimeout(
               //匿名函数
               function(){console.log(this.x);},
               500
           );
        }
    };
    obj.show();//打印结果:undefined


    案例中,我们的obj对象中有一个属性x和一个属性show( )方法(用的是对象的简洁表示法,[第九节已讲解,点击查看](http://mp.weixin.qq.com/s?__biz=MzA3MDg1NzQyNA==&mid=2649654084&idx=1&sn=e56effc319f448f5744970e767997461&scene=21#wechat_redirect)),show( )通过this打印出x的值。可最后一句代码执行后,我们打印出的结果是undefined。这是为什么呢?难道x的值不是100吗?



    没错,x的值确实是100,但问题出在了this上,当代码执行到了setTimeout( )的时候,此时的this已经变成了window对象(setTimeout( )是window对象的方法),已经不再是obj对象了,所以我们用this.x获取的时候,获取的不是obj.x的值,而是window.x的值,再加上window上没有定义属性x,所以得到的结果就是:undefined。



    我们可以用一些ES5中的知识来巧妙地避过这个坑,但是,我们今天主要介绍的是ES6的箭头函数。

箭头函数闪亮登场

    如果使用箭头函数来编写同样的一段代码,得到的this.x又是另一番景象。我们来试试看:

    //定义一个对象
    var obj = {
        x:100,//属性x
        show(){
            //延迟500毫秒,输出x的值
            setTimeout(
               //不同处:箭头函数
               () => { console.log(this.x)},
               500
            );
        }
    };
    obj.show();//打印结果:100


    同样的一段代码,唯一的不用就是setTimeout中,原本的匿名函数用箭头函数代替了,你可以往上翻,对比着看两段代码的不同之处。此外,最大的不同的是打印结果,用箭头函数编写的这段代码,成功地打印出了我们想要的结果:100。



    为什么是这样?正如文章第三段所概括:

箭头函数中的this指向的是定义时的this,而不是执行时的this

    当定义obj的show( )方法的时候,我们在箭头函数编写this.x,此时的this是指的obj,所以this.x指的是obj.x。而在show()被调用的时候,this依然指向的是被定义时候所指向的对象,也就是obj对象,故打印出:100。

    以上就是箭头函数中this的指向问题讲解!如果看完有点绕的话,可以重看一遍,**看慢一点,学得更快**!



    再次感谢  “断线人偶”,“Better”  2位童鞋的提醒,也希望更多童鞋像他们一样参与互动,一起学习一起进步,不管你处于哪个学习阶段,这里都欢迎。

补课小结

ps :箭头函数的this指向的是定义时的this对象,而不是执行时的this对象。

更多前端学习内容文章干货请关注我的专栏(不断更新)

阿里名厂标准web前端高级工程师教程目录大全,从基础到进阶,看完保证您的薪资上升一个台阶

在这里我给大家准备了很多的学习资料

其实你与阿里工程师的差距只差这些东西

相关文章

  • 箭头函数的this指向问题-一看就懂

    OK,对于箭头函数的this 用一句话概括: 举个栗子 箭头函数闪亮登场 箭头函数中的this指向的是定义时的th...

  • ES6新特性(更新篇)

    首先感谢Carnia帮我指出ES6箭头函数中this指向的错误,此次主要更新箭头函数中this指向问题。 ECMA...

  • 箭头函数和普通函数的主要区别是什么?

    箭头函数和普通函数的主要区别: this的指向问题,箭头函数是不存在this的(也是箭头函数和普通函数最主要的区别...

  • React Native 关于箭头函数、普通函数与点击事件的调用

    箭头函数 箭头函数一个重要的好处就是对于this对象指向问题,在普通函数中this对象的指向是可变的,所以在普通函...

  • React处理事件响应机制

    一. 箭头函数 1.1 使用箭头函数的优点 1、箭头函数一个重要的好处就是对于this对象指向问题,在普通函数中t...

  • js中this指向

    当我们需要把函数当做另外函数参数传入时,我们使用箭头函数。 关于this的指向。 问题:箭头函数中的this是如何...

  • JavaScript笔记2

    this、高阶函数、闭包、箭头函数、generator 1. this 函数this指向问题:(1)this和它声...

  • this【重点】

    函数this的指向(箭头函数除外):函数在哪里调用,这个this就指向哪里。 this的指向一般有3种情况:* 1...

  • 箭头函数里this指向问题

    结论: 箭头函数 会动态绑定this,直到找到 外层第一个function,没有function的话就是全局的的对...

  • Reflux回调函数的坑

    this指向问题 刚开始一直报找不到completed函数,原因是js里this指向的问题 1.箭头函数的this...

网友评论

    本文标题:箭头函数的this指向问题-一看就懂

    本文链接:https://www.haomeiwen.com/subject/zohuwhtx.html