循环中的块级绑定
开发者最需要使用变量的块级作用域的场景,或许就是在
for
循环内,也就是想让一次性的 循环计数器仅能在循环内部使用。例如,以下代码在JS
中并不罕见
for (var i = 0; i < 10 ; i ++){
process(items[i]);
}
//i在此处依旧可以被访问到
console.log(i); //10
在其他默认使用块级作用域的语言中,这个例子能够照预期工作,也就是只有for
才能访问 变量i
。然而在JS
中,循环结束后i
仍然可被访问,因为var
声明导致了变量提升。 若像如下代码那样换为使用let
,则会看到预期行为:
for (let i = 0; i <10 ; i ++){
process(items[i]);
}
//i在此处不可以被访问到,抛出错误
console.log(i);
本例中的变量i
仅在for
循环内部可用,一旦循环结束,该变量在任意位置都不可访问。