首页 > 代码库 > ECMAScript 6中let和const详解

ECMAScript 6中let和const详解

1:Let命令

(1)Let定义块级作用域的变量,var定义的变量会提升。Let不会提升。如下。可以先用是undefined但是let在定义之前是不能用的。会报错Uncaught ReferenceError: letter is not defined(…)

console.log(color)

console.log(letter)

var color = ‘red‘;

let letter = ‘a‘

只要块级作用域内存在let命令,声明的变量不受外部影响。

var tmp = 123;

if (true) {

  tmp = ‘abc‘; //tmp is not defined(…)

  let tmp;

}

在代码块内,使用let命令声明变量之前,该变量都是不可用,称“暂时性死区”;

typeof x;  //使用是在let声明之前x is not defined(…)

let x;

再如function bar(x = y, y = 1) {

   return [x, y];

}

bar();// y is not defined(…)x的默认值等于y,此时y还没声明。

(2)通过var在块作用域中定义变量在外面可以访问,{}

通过let在块作用域中定义的变量,在外面不可以访问{}

if (true) {

// 块作用域里面都可以访问

var color = ‘red‘;

let letter = ‘a‘

console.log(color)

console.log(letter)

}

console.log(color)  //可以访问

console.log(letter)  //不能访问letter is not defined(…)

(3)let保存变量

var arr = []

for (var i = 0; i < 5; i++) {

arr[i] = function  () {

console.log(i, ‘iii‘)

}

}

arr[1]()    //5,‘iii’

i是全局for循环外面也可以访问。For循环完之后i是5

var arr = [];

for (let j = 0; j < 5; j++) {

arr[j] = function  () {

console.log(j, ‘jjjj‘)

}

}

arr[1]();  // 1,’iii’ 

这个函数的时候,会找到这个块作用域,这个作用域中定义了块作用域变量j

console.log(i, j)   j是外面无法访问的。

(4):不允许重复声明

function () {

  let a = 10;

  var a = 1;

}

//Uncaught SyntaxError: Unexpected token (

function () {

  let a = 10;

  let a = 1;

}

//Uncaught SyntaxError: Unexpected token (

2:const命令

(1)定义之后再也无法修改 (大写,下划线)

var PI = Math.PI;

PI = 3;

console.log(PI)   //3

const PI = Math.PI

PI = 3;

console.log(PI)  // 报错Assignment to constant variable.(…)

(2)在块作用域中定义一个常量  块作用域内访问有效。外面是访问不到的

if (true) {

const PIa = Math.PI

Let   PIa = Math.PI

}

console.log(PIa)  //PIa is not defined(…)

(3)必须先定义再使用

console.log(PIa)  //Identifier ‘PI‘ has already been declared(…)

const PI = Math.PI;

 

ECMAScript 6中let和const详解