for循环无法反映由setTimeout回调引起的更改

时间:2019-10-18 03:10:19

标签: javascript angular asynchronous closures

我正在学习Angular组件的生命周期。在调试ExpressionChangedAfterItHasBeenCheckedError时,我偶然发现了这个code

class AppComponent {
    _time;
    get time() {  return this._time; }

    constructor() {
        this._time = Date.now();

        setInterval(() => {
            this._time = Date.now();
        }, 1);
    }
}

当我进行大量打印时:

app = new AppComponent();
for (var i = 0; i < 1000000; ++i) {
    console.log(app.time);
}

打印值根本不会更改,尽管更改应该非常频繁。我的问题是:是否有一个保留app.time值的闭包,以便多个console.log语句看到相同的值?还是不是这样,为什么阻止更新?

0 个答案:

没有答案