代码:
    function* foo() {yield 1;yield 2;yield 3;}const genr = foo();for (const item of genr) {console.log(item);}for (const i = 0; i <= 5; i++) {console.log("i", i);}

在这两段代码中,尽管两者都包含 for 循环,但它们的用途和行为有所不同,这也是为什么 const 在第一个循环中可以使用,但在第二个循环中会导致错误的原因。
-  第一个循环: for...of循环- 在 for...of循环中,循环遍历的是一个可迭代对象(如生成器或数组),并在每次迭代时生成新的变量(在这里是item)。
- const在- for...of循环中的作用是为每次循环创建一个新的块作用域,- item在循环体内仅为当前迭代中的值。
- 在循环的每一次迭代中,item都是从生成器(或其他可迭代对象)中获取的新值,且它在循环体内不会被改变。这种行为适合const的不可变性特性。
 
- 在 
-  第二个循环: for循环- 在 for循环中,你定义了一个初始化表达式、条件表达式、循环体和步进表达式。在这段代码中,你使用const声明循环变量i,并且设定它的初始值为0。
- for循环需要在每次迭代中递增- i(即- i++),这相当于对- i进行重新赋值。这与- const的不可变性相矛盾,因为- const声明的变量不能被重新赋值。
- 因此,使用 const在for循环中会导致错误,因为i在每次循环迭代中需要递增。
 
- 在 
解决方法是,在 for 循环中使用 let 来声明 i:
for (let i = 0; i <= 5; i++) {console.log("i", i);
}
这样做允许 i 在每次迭代中递增而不引发错误。