ES6箭头功能可以有自己的词汇吗?

时间:2018-02-26 11:58:22

标签: javascript ecmascript-6 this

function Person(){
  this.age = 0;

  setInterval(() => {
    this.age++; // this refers to the person object
  }, 1000);
}

但是,如果我想访问"这个" setInterval函数,而不是父对象。我知道箭头函数不具备自己的词汇,但除了编写非箭头函数之外,还有办法绕过这个吗?

2 个答案:

答案 0 :(得分:4)

不,arrow function does not possess athis variable (也不是argumentsuper& new.target)因此没有任何内容可以避免"规避&#34 34;到。

箭头函数旨在继承词法范围,如果 具有自己的this - 它会干扰其定义行为。

不要将箭头功能视为常规功能的简单速记。

相反,你应该"阅读"箭头的功能如下:

  

... 在周围的上下文中执行这些语句 ...

  

... 此功能具有跟踪4 patterns of invocation, are being used to determine the value ofthis 中的哪个

的精神开销

答案 1 :(得分:1)

this = setInterval()的{​​{1}} 如果您的脚本中启用了严格模式(类似于脚本开头的window),那么它将是'use strict';。出于所有意图和目的,您可能希望使用undefined

的全局范围

你可以重写你的功能来访问这样的窗口:

window

此外,您还没有保存setInterval ID,因此当对象过时时您无法清除它。它将保留在内存中,导致潜在的内存泄漏

setInterval(() => {
    this.age++; // this refers to the person object
    window.something = this.age;
}, 1000);

因此当一个人过时时,你可以杀死他们,不留痕迹。