Javascript 在循环内重新声明块范围的循环变量
我最近遇到一段代码,它让我对循环中用let关键字声明的块范围变量感到困惑 考虑以下代码段: 对于let i=0;i<10;i++{ 让我=‘你好’; console.logi; } 正如我们在这里看到的let定义 let语句声明一个块作用域局部变量Javascript 在循环内重新声明块范围的循环变量,javascript,Javascript,我最近遇到一段代码,它让我对循环中用let关键字声明的块范围变量感到困惑 考虑以下代码段: 对于let i=0;irun;fn;{ 让我们跑=假; }这不是同一个范围。每次迭代都是不同的作用域。@Taplar是的,我知道,但据我所知,我们不应该在循环中重新声明i。如果它是不同的作用域,它如何重新声明?你忽略了你刚刚同意的前提,这是一个不同的范围。你是在寻找一个带有规范引用的答案,还是…?@Ry-我知道循环的每个迭代都有不同的范围。我想,我对我是否为let I=0声明了变量感到困惑;i“是的”?
for (let i = 0; i < 10; i++) {
//blah blah blah
let i = 'Hello'
}
如果我们回到let定义,这一点很清楚,因为let语句是块范围的
希望这有助于解决您的问题。为什么
forlet fn==>run;fn;{
让我们跑=假;
}这不是同一个范围。每次迭代都是不同的作用域。@Taplar是的,我知道,但据我所知,我们不应该在循环中重新声明i。如果它是不同的作用域,它如何重新声明?你忽略了你刚刚同意的前提,这是一个不同的范围。你是在寻找一个带有规范引用的答案,还是…?@Ry-我知道循环的每个迭代都有不同的范围。我想,我对我是否为let I=0声明了变量感到困惑;i<10;i++是在循环体中的另一个作用域中声明的?不过,规范中关于for循环的复杂声明内容有不同的用途。并不是说我真的知道一个更好的方法来回答这个问题……“我[认为]你不能在同一个范围内重新声明块作用域变量”->“是的”?我不确定你想通过你问题中的代码示例告诉我什么。第一个不起作用,因为时间死区。虽然,你答案的最后一行——每个声明都在它自己的范围内,for循环的主体也有它自己的范围——已经消除了我的困惑。@Yousaf,呃,实际上我把它和,应该在基于错误假设的答案之前检查规范。编辑。
let i = 0
do {
// blah blah blah
let i = 'Hello'
} while(i ++ < 10);