let 和 const 命令
1 let命令声明,没有变量提升
基本语法: ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
{ let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1
不存在变量提升
var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。
为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错
// var 的情况 console.log(foo); // 输出undefined var foo = 2; // let 的情况 console.log(bar); // 报错ReferenceError let bar = 2;
2 let 是一个块及作用域
只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
var tmp = 123; if (true) { tmp = 'abc'; // ReferenceError let tmp; }
上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。
3 let 不能重复定义
不允许重复声明 let不允许在相同作用域内,重复声明同一个变量。
// 报错 function () { let a = 10; var a = 1; } // 报错 function () { let a = 10; let a = 1; }
4 const声明变量,一旦声明,无法修改(有let是的全部特性)
5 const声明对象,不能直接赋值修改,可以修改单个属性,
作用1 for循环经典例子
const arr = [];
for(let i=0;i<arr.length;i++){
arr [i] = function(){
return i;
}
}
作用2 不会污染全局变量
建议:默认使用const(编译性能好),而只有你知道变量值需要修改情况下使用let,

浙公网安备 33010602011771号