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是的全部特性)

const声明对象,不能直接赋值修改,可以修改单个属性,

作用1   for循环经典例子

const arr = [];

for(let i=0;i<arr.length;i++){

 arr [i] = function(){

    return i;

 } 

}

 

作用2   不会污染全局变量

建议:默认使用const(编译性能好),而只有你知道变量值需要修改情况下使用let,

posted @ 2017-08-17 09:43  博星  阅读(157)  评论(0)    收藏  举报