this的指向,在普通函数,箭头函数中的区别(与网络上大多数结论不同!)

#1.在普通函数中,this的指向问题,首先我们需要明白,函数调用时,是由解析器调用的.

在这里插入图片描述
,上面这段话也就直接说明了,函数调用的方式不同,this的指向不同
下面我用代码来进行解释我所说的。
代码举例:

		//1.
         function fn(){
             console.log(this);   //打印结果是window,但是实际上我们并没有传值给fn函数this
                                  //也就是说,this是解析器自动传的,又因为函数在全局调用,所以
                                  //this的指向是全局,也就是window
         }
         //fn(); 
         //2.
        var test= {
            name:"asda",
            sayName:fn
        }
         test.sayName();          //此时打印的结果是object,原因是,fn函数是由test对象调用,
                                  //也就是使用方法的形式调用,由于test是一个对象,所以this指向这个对象
                                  //所以打印结果是object

#2.在箭头函数中,this的指向,先说结论:箭头函数中的this指向,引用的是最近作用域中的this。 更直接的理解就是:箭头函数中的this指向就是距离箭头函数最近一层的作用域中的this对象。

下面我直接用代码来做解释;

	//1.如果感觉不够清晰,可以看2
           var fn={
               aaa(){
                //普通函数写法
                   setTimeout(function (){
                       console.log(this)          //此时打印window对象,没问题
                   }),
                //箭头函数写法
                   setTimeout(()=>{
                       console.log(this);        //此时打印object,原因,箭头函数中的this指向的是离它最近的一层作用域
                                                 //此时箭头函数的上层作用域是fn对象,所以打印结果应该是object
                   })
               }
           }
          fn.aaa();
        //2.
          var obj = {
            id: 42,
            counter: function counter() {
                setTimeout( function() {
                    id=123;
                    console.log(this.id);        //此时打印结果是123
                }, 1000),
                //箭头函数写法
                setTimeout(() => {
                    id=123;
                    console.log(this.id);        //此时打印结果是42,不是123的原因,
                                                 //是因为当前的this指向的是obj对象的作用域,不是conter
                }, 1000);
          }
             };
             obj.counter();

#3.如果感觉对你有帮助,请点个赞吧,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南工gjl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值