js箭头函数this的指向问题?

var a = {
    b: {
        c: {
            d: {
                e: ()=>{console.log(this)} // Window
            }
        }
    }
}

var obj = {
   say: function () {
    console.log(this)
    setTimeout(() => {
        console.log(this)
    });
   }
 }
 obj.say() // obj

为什么第二个会指向obj,而不是window?

阅读 2.8k
3 个回答

因为第二个是用obj调用的,调用者是obj
this指向的都是调用者
第一个只是执行了这段代码,但是没有调用者,所以默认就是window
细节可以看看this

箭头函数没有自己的this所以会往外层作用域找

var obj = {
   say: function () {
    console.log(this)//找到了
    setTimeout(() => {
        console.log(this)//没有this向外层找
    });
   }
 }

箭头函数中的this值是继承它的外围作用域的,this在没改变的情况下是谁调用指向谁,所以say中的this是指向obj 的,箭头函数中的this继承这个this,故指向obj

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题