1-let和const命令

在ES6中,我们通常实用 let 表示变量const 表示常量,并且 letconst 都是块级作用域,且在当前作用域有效不能重复声明。

1.1 let 命令

let 命令的用法和 var 相似,但是 let 只在所在代码块内有效。
基础用法

{
    let a = 1;
    let b = 2;
}

并且 let 有以下特点:

  • 不存在变量提升:
    在ES6之前,我们 var 声明一个变量一个函数,都会伴随着变量提升的问题,导致实际开发过程经常出现一些逻辑上的疑惑,按照一般思维习惯,变量都是需要先声明后使用。
// var 
console.log(v1); // undefined
var v1 = 2;
// 由于变量提升 代码实际如下
var v1;
console.log(v1)
v1 = 2;

// let 
console.log(v2); // ReferenceError
let v2 = 2;
  • 不允许重复声明:
    letconst相同作用域下,都不能重复声明同一变量,并且不能在函数内重新声明参数
// 1. 不能重复声明同一变量
// 报错
function f1 (){
    let a = 1;
    var a = 2;
}
// 报错
function f2 (){
    let a = 1;
    let a = 2;
}

// 2. 不能在函数内重新声明参数
// 报错
function f3 (a1){
    let a1; 
}
// 不报错
function f4 (a2){
    {
        let a2
    }
}

1.2 const 命令

const 声明一个只读常量
基础用法

const PI = 3.1415926;
console.log(PI);  // 3.1415926

注意点

  • const 声明后,无法修改值;
const PI = 3.1415926;
PI = 3; 
// TypeError: Assignment to constant variable.
  • const 声明时,必须赋值;
const a ; 
// SyntaxError: Missing initializer in const declaration.
  • const 声明的常量,let 不能重复声明;
const PI = 3.1415926;
let PI = 0;  
// Uncaught SyntaxError: Identifier 'PI' has already been declared