var和let关键字的比较
说明
let是es6新增的关键字
有效区域
let 是在代码块内有效,var 是在全局范围内有效:
{
let a = 0;
var b = 1;
}
a // 此时报错ReferenceError: a is not defined
b // 此时输出1
重复声明
let 只能声明一次 var 可以声明多次
let a = 1;
let a = 2;
var b = 3;
var b = 4;
a // 此时报错Identifier 'a' has already been declared
b // 此时输出4
let可以在循环中使用,每次循环都是一个新的变量
var是全局声明的,在循环中可以一直使用同一个变量
变量提升
console.log(a); //报错ReferenceError: a is not defined
let a = "apple";
console.log(b); //undefined var
b = "banana";
变量 b 用 var 声明存在变量提升,所以当脚本开始运行的时候,b 已经存在了,但是还没有赋值,所以会输出 undefined。
变量 a 用 let 声明不存在变量提升,在声明变量 a 之前,a 不存在,所以会报错。