一、声明变量的方式
- var
- let (ES6新增)
- const (ES6新增)
二、let 、const 与 var 的区别
- 重复声明:
var可以重复声明,let、const则不能。
var num = 10;var num = 20;console.log(num);// num: 20let num = 10;let num = 20;console.log(num);// Identifier 'num' has already been declaredconst 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 initializationfunction 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(); // 1var 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); // 3const arr = [1,2,3];for(let i= 0; i < arr.length; i++) {console.log(i);}console.log(i); // Uncaught ReferenceError: i is not defined
- 方便内存垃圾的回收
术语解释 提升:所有声明(变量和函数)“移动”到各自作用域的顶端。当有重复声明时,函数提升优先于变量提升。
