2016-09-27 38 views
0

我已经阅读了箭头功能的一些主题,但下面的代码只是让我困惑。ES6箭头功能和这个上下文

var bunny = { 
    name: 'Usagi', 
    tasks: ['transform', 'eat cake', 'blow kisses'], 
    first :() => { 
    console.log(this) //does not refer to bunny 
    }, 
    second: function(){ 
    console.log(this) //refers to bunny 
    }, 
    third() { 
    this.tasks.forEach((task) => { 
     console.log(this); //refers to bunny 
    }); 
    } 
}; 

bunny.first(); 
bunny.second(); 
bunny.third(); 

有谁能告诉我第三个函数的内部函数是如何引用当前对象,而第一个函数没有。 当我们使用箭头函数的时候,这是不是指当前作用域被定义的地方?

+0

箭头函数没有在自己的词法范围中定义'this',所以它从外部范围中获取它,就像它会得到一个未定义的正常变量一样。 – 2016-09-27 22:48:30

+0

对象文字属性表达式中的当前'this'上下文不是构造对象。 – Bergi

+0

请参阅[箭头函数与函数声明/表达式:它们是等价的还是可交换的?](http://stackoverflow.com/q/34361379/218196) –

回答

2

Arrow functions或多或少相当于function语句,不同之处在于它们结合的this参数父范围的

换句话说,如果一个箭头函数出现在顶部范围,其this参数将总是指全局范围(例如,在浏览器中window或node.js中global),而常规的函数内的箭头功能将其this参数与它的外部函数相同,因为您的代码将被展示。