在for循环中使用const作为循环变量

Cru*_*ine 2 javascript typescript ecmascript-6 angular

我了解在/ 中使用varletin for循环的行为,但是有人可以解释为什么const变量作为循环变量的行为以及行为方式吗?typescriptjavascript

for (const i = 0; i < 5; i++) {
  setTimeout(function() {
    console.log(i)
  }, 100 * i);
}
Run Code Online (Sandbox Code Playgroud)

据我了解,当您将变量声明为const并初始化其值时,该值无法更改

但是您可以在中看到更改的值console.log()。正确编译时必须抛出错误?我在这里缺少什么?

我为此行为创建了2个示例。

循环变量为const

常量变量重新分配

有人可以帮我理解吗?

adi*_*iga 6

它在Stackblitz中工作,因为它正在运行经过编译的代码:

AppComponent.prototype.test = function () {
    var _loop_1 = function (i) {
        setTimeout(function () {
            console.log(i);
        }, 100 * i);
    };
    for (var i = 0; i < 5; i++) {
        _loop_1(i);
    }
};
Run Code Online (Sandbox Code Playgroud)

如果您在此处添加代码段,则该代码将无法运行,因此无法正常工作

AppComponent.prototype.test = function () {
    var _loop_1 = function (i) {
        setTimeout(function () {
            console.log(i);
        }, 100 * i);
    };
    for (var i = 0; i < 5; i++) {
        _loop_1(i);
    }
};
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明