收藏
回答

谁能讲解云开发中,回调函数中es6和箭头函数的this,分别指向什么吗?

希望能从理论方面讲解一下es6和箭头函数的this指向问题,为什么会指向不同?

最后一次编辑于  2020-03-31
回答关注问题邀请回答
收藏

1 个回答

  •  
     
    2020-03-31
    首先 success(){} 其实就是 success: function(){}
    然后之所以 this 指向会不同是因为
    普通函数默认指向 window 对象,而微信小程序将 window 对象屏蔽了, 所以会输出 undefined
    而箭头函数 默认指向定义时的 this 对象,所以会指向当前组件
    
    2020-03-31
    有用 1
    回复 3
    • 立志大灰郎
      立志大灰郎
      2020-03-31
      是箭头函数指向window,普通函数指向定义时候的对象吧?
      2020-03-31
      回复
    • 立志大灰郎
      立志大灰郎
      2020-03-31
      普通函数指向调用时候的对象,箭头函数指向定义时候的对象,这句话怎么理解呢?
      2020-03-31
      回复
    •  
       
      2020-04-01回复立志大灰郎
      普通函数指向最后调用的对象,箭头函数指向定义时的对象


      箭头函数指向定义时的对象,其实是箭头函数没有this指向,他会将他被定义时的 this 对象(上下文) 作为自己的 this 指向
      在你的代码中 fun2 是在 window 上下文下被定义的,他只是定义在 obj 对象里面,而不是在 obj 上下文中被定义 ,因为执行到 var obj = {...} 这句代码时,同时对象里面的 函数在这个时候也会被定义,但是没有执行,但是 this 现在是指向 window 的,所以在这时定义的箭头函数 距离他最近的一层的 this 对象是 window,这里是重点。
      然后乡下执行 obj.fun1();obj.fun2();
      而由于 fun1 是普通函数
      你调用 obj.fun1(),其实整个调用链 是 window.obj.fun1();
      那么最后调用他的对象就是obj (这就是 普通函数指向最后调用它的对象)
      而如果你加一句
      let fun1Temp = obj.fun1;
      fun1Temp();
      虽然最终还是执行 fun1 这个函数,但是 this 已经指向 window 了
      因为调用链变成了 window.fun1Temp()
      2020-04-01
      1
      回复
登录 后发表内容
问题标签