用var声明的变量的作用域是它当前的执行上下文,它可以是嵌套的函数,也可以是声明在任何函数外的变量。let和const是块级作用域,意味着它们只能在最近的一组花括号(function、if-else 代码块或 for 循环中)中访问。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
functionfoo() { // 所有变量在函数中都可访问 var bar = 'bar'; let baz = 'baz'; const qux = 'qux';
console.log(bar); // bar console.log(baz); // baz console.log(qux); // qux }
console.log(bar); // ReferenceError: bar is not defined console.log(baz); // ReferenceError: baz is not defined console.log(qux); // ReferenceError: qux is not defined
1 2 3 4 5 6 7 8 9 10 11
if (true) { var bar = 'bar'; let baz = 'baz'; const qux = 'qux'; }
// 用 var 声明的变量在函数作用域上都可访问 console.log(bar); // bar // let 和 const 定义的变量在它们被定义的语句块之外不可访问 console.log(baz); // ReferenceError: baz is not defined console.log(qux); // ReferenceError: qux is not defined