setInterval函数后如何访问全局变量。变量即使设置后仍给出未定义或NaN

Jav*_*mer 1 timer setinterval typescript ionic-framework angular

这是一个打字稿类。我正在尝试访问setInterval函数中的开始时间和计数。我之前已经设置了值,为什么我们会得到undefined和NaN?以及如何解决这个问题?

startTimer() {
 this.startTime = new Date();
 this.count = 100;
 console.log("STARTTIME: " + this.startTime); //RESULT: Mon Dec 17..etc
 console.log("COUNT: " + this.count); //RESULT: 100
    this.timer = setInterval(function () {
      console.log("STARTTIME: " + this.startTime); //Undefined
      this.count += 1;
      console.log("COUNT: " + this.count); //NaN
     }, 1000);
 }
Run Code Online (Sandbox Code Playgroud)

Fly*_*yii 5

尝试使用粗箭头代替函数

(来自文档)

this传统上一直是JavaScript的痛点。正如一个明智的人曾经说过的那样:“我讨厌JavaScript,因为它会this轻易失去所有含义。” 粗箭头通过从周围上下文中捕获其含义来修复此问题。

因此,请像这样使用它:

setInterval(() => {  // <-----
  console.log("STARTTIME: " + this.startTime); 
  this.count += 1;
  console.log("COUNT: " + this.count); 
}, 1000);
Run Code Online (Sandbox Code Playgroud)

Stackblitz