块级作用域
很多语言中都有块级作用域,JavaScript使用var声明变量,以function来划分作用域,大括号“{}” 却限定不了var的作用域。用var声明的变量具有变量提升(declaration hoisting)的效果。
ES6里增加了一个let,可以在{}, if, for里声明。用法同var,但作用域限定在块级,let声明的变量不存在变量提升。
'use strict';
function f1() {
var a = 1;
let n = 2;
if (true) {
var a = 20;
let n = 10;
}
console.log(n); // 2
console.log(a); // 20
}
f1();