我遇到了一个奇怪的问题,但无法理解Angular为什么会这样表现,我在谷歌上搜索问题时并没有太多的好运,所以我来到这里。
我想测试setInterval()
函数和一些变量的计数,不是太难的事情,但我卡住了,找不到解决方案或者解释。
这是我正在使用的代码,它可以正常工作:
public counter: number = 1;
myFunction() {
setInterval(() => {
console.log(this.counter);
this.counter++;
}, 1000);
}
Output: 1, 2, 3, 4, 5...
这段代码本来可以正常运行,但是当我把函数改成这样时,输出变成了未定义,然后是 Nan, Nan, Nan
。
public counter: number = 1;
foo() {
console.log(this.counter);
this.counter++;
}
myFunction() {
setInterval(this.foo, 1000);
}
* myFunction is the starting function *
Output: undefined, Nan, Nan, Nan...
我猜测变量访问存在问题,导致foo()无法访问全局变量,但这是如何发生的?我该怎么解决这个问题呢?
setInterval(() => this.foo(), ...)
或setInterval(this.foo.bind(this), ...)
或者... 这与 Angular/TS/ES6 无关,可以参考任何 JS 中的this
作用域问题。 - jonrsharpe