for(var i=0; i<10; i++) { console.log(i); }
for(let i=0; i<10; i++) { console.log(i); }
try { undefined(); // 执行一个非法操作来强制制造一个异常 } catch(err) { console.log(err); // 能够正常运行 } console.log(err); // ReferenceError: err not defined
var foo = true; if (foo) { let bar = foo * 2; console.log(bar); } console.log(bar); // ReferenceError
在开发和修改代码的过程中,如果没有密切关注哪些块作用域中有绑定的变量,并且习惯性地移动这些块或者将其包含在其他的块中,就会导致代码变得混乱。为块作用域显式地创建块可以部分解决这个问题
var foo = true; if (foo) { { let bar = foo * 2; console.log(bar); } } console.log(bar); // ReferenceError
var foo = true; if (foo) { var a = 2; const b = 3; a = 3; // 正常 b = 4; // 错误 } console.log(a); // 3 console.log(b); // ReferenceError: b is not defined