ES5 只有全局作用域和函数作用域,没有块级作用域,let实际上为 JavaScript 新增了块级作用域。
例子:
function f(){
let x = 8;
if(true){
let x = 10;
}
console.log(x); // 8
}
Tips :外层代码块不受内层代码块的影响,运行后输出8
ES6 允许块级作用域的任意嵌套。
{{{{let a = 8;}}}}
内层作用域可以定义外层作用域的同名变量。
{{{
let name = 'mark';
{let name = 'mark';}
}}}
外层作用域无法读取内层作用域的变量。
{
{let name = 'mark';}
console.log(name); // // 报错
}