一、声明变量的方式
- var
- let (ES6新增)
- const (ES6新增)
二、let
、const
与 var
的区别
- 重复声明:
var
可以重复声明,let
、const
则不能。
var num = 10;
var num = 20;
console.log(num);
// num: 20
let num = 10;
let num = 20;
console.log(num);
// Identifier 'num' has already been declared
const num = 10;
const num = 20;
console.log(num);
// Identifier 'num' has already been declared
- 变量提升:
let
、const
不存在变量提升,而var
可以。
function f() {
console.log(i);
}
f();
let i = 1;
// Cannot access 'i' before initialization
function f() {
console.log(i);
}
f();
var i = 1;
// undefined 变量提升
- 块级作用域:
let
、const
存在块级作用域,而var
则没有。
function f() {
let n = 1;
if (n) {
let n = 2;
}
console.log(n);
}
f(); // 1
var n = 1;
function f() {
console.log(n);
var n = 2;
}
f(); // undefined
三、let
、const
的优点
- 避免作用域的污染
const arr = [1,2,3];
for(var i= 0; i < arr.length; i++) {
console.log(i);
}
console.log(i); // 3
const arr = [1,2,3];
for(let i= 0; i < arr.length; i++) {
console.log(i);
}
console.log(i); // Uncaught ReferenceError: i is not defined
- 方便内存垃圾的回收
术语解释 提升:所有声明(变量和函数)“移动”到各自作用域的顶端。当有重复声明时,函数提升优先于变量提升。