ECMAScript6-1

1、let与const

  ES205(ES6)新增两个重要的JavaScript关键字:let和const

  let声明的变量只在let命令所在的代码块内有效,const声明一个只读的常量,一旦声明,其值就不能改变

1.1、let命令

 let命令有以下特点:

(1)代码块内有效

  ES2015(ES6)新增加了两个重要的Javascript关键字:le't和const。llet声明的变量只在let所在的代码块中有效,

  const声明一个只读的常量,一旦声明,常量的值不能改变

{
    let a = 1;
    var b = 2;
    console.log(a);//输出1
    console.log(b);//输出2
}
console.log(a);//报错 ReferenceError: a is not defined
console.log(b);//输出2

(2)不能重复赋值

  let只能声明一次,var可以声明多次:

let a = 1;
let a = 2;//报错 Identifier 'a' has already been declared
var b = 3;
var b = 4;
console.log(a);
console.log(b);//输出4

(3)不存在变量提升

let不存在变量提升,var会变量提升

console.log(a);  //ReferenceError: a is not defined
let a = "apple";

console.log(b);  //undefined
var b = "banana";

(4)暂时性死区

只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。

var tmp = 123;

if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}

ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

 

1.2、const命令

const 声明一个只读变量,声明之后不允许改变。意味着,一旦声明必须初始化,否则会报错。

基本用法:

const P = "3.1415926";
console.log(p)  // 3.1415926

const M;  // 报错 SyntaxError: Missing initializer in const declaration

const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。

const foo;
// 报错 SyntaxError: Missing initializer in const declaration

上面代码表示,对于const来说,只声明不赋值,就会报错。

const的作用域与let命令相同:只在声明所在的块级作用域内有效。

if (true) {
  const MAX = 5;
}

MAX // Uncaught ReferenceError: MAX is not defined

const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用

if (true) {
  console.log(MAX); // ReferenceError
  const MAX = 5;
}

上面代码在常量MAX声明之前就调用,结果报错。const声明的常量,也与let一样不可重复声明

var message = "Hello!";
let age = 25;

// 以下两行都会报错
const message = "Goodbye!";
const age = 30;

暂时性死区:

var P = 1;
if(true){
  console.log(P);  //报错 ReferenceError: PI is not defined
  const PI = 2;
}

代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量 P之前使用它会报错。

posted @ 2019-12-17 11:40  林小冉  阅读(148)  评论(0编辑  收藏  举报