阮一峰老师在他的文章中说,箭头函数的this就是定义时所在的对象,然后我们的小白同学很Happy的写下了如下代码:

var obj={
    num:1,
    counter:()=>this.num++
}
obj.counter();
console.log(obj.num)
复制代码

他期望的结果是2,然而结果始终是1,问题出现在哪里呢?
问题就在于JS中对于对象没有一个明确的表述,上面小白用字面量方法创建的obj是一个对象,而阮一峰老师文章的对象指的是函数,所以就出现了理解偏差。
箭头函数的this总结起来就一句话:不管在什么情况下,箭头函数的this跟外层function的this一致,外层function的this指向谁,箭头函数的this就指向谁,如果外层不是function则指向window

var obj={
    id:123,
    testFun:function(){
        var a= ()=>console.log(this.id)
        a();
    }
}
//testFun的this指的是obj,则箭头函数的this指向obj。
obj.testFun()  
//testFun的this指向window,箭头函数的this指向window。
obj.testFun.apply(null) 
复制代码

转载于:https://juejin.im/post/5b3c32cee51d4519634f7f4b