ES6 — 掌握 let 和 const 命令

88 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

Day 1 —— let 和 const 命令

ES6 中的letconst命令,简单理解为声明一个变量、字符串、数组、对象等一系列数据类型,类似于 JS 中的var命令,但不完全相同,letconst存在一些特殊功能。

let 命令

let命令的特点:

  • let声明的变量只在它所在的块级作用域中有效

    {
        var a = 123;
        let b = 456;
        console.log(a); // 123
        console.log(b); // 456
    }
    console.log(a); // 123
    console.log(b); // 报错
    
  • let不允许重复声明

    // 在相同块级作用域中,不允许重复声明同一个变量。
    function num() {
      let a = 123;
      var a = 456;
    } // 报错
    
    function num() {
      let a = 123;
      let a = 456;
    } // 报错
    
    // 如果函数传入参数,在函数内部不得重新定义该参数。
    function num(a) {
      let a = 123;
    }
    num() // 报错
    
    function num(b) {
      {
        let b = 456; // 该次声明的变量与参数不处于相同作用域中
      }
    }
    num() // 不报错
    
  • let不存在变量提升

    // 不存在变量提升可简单理解为,在某一变量声明之前,不能返回或者打印该变量,否则会报错  
    function num() {
        console.log(b); // undefined   var命令存在变量提升
        var b = 456;
    }
    num();
    
    function num() {
        console.log(b); // 报错   let命令不存在变量提升
        let b = 456;
    }
    num();
    
  • let存在暂时性死区

    // 暂时性死区,简单理解为变量需要在使用前声明,意思与“不存在变量提升” 一个道理。
    var a = 123;
    function num() {
      a = 456;
      let a = 123;
      console.log(a);
    }
    num(); // 报错(num函数内部是一个新的块级作用域,这里不能先定义再用let声明)
    
    function num() {
      let a = b;
      let b = 456;
      console.log(a);
    }
    num(); // 报错(先声明了a = b,但此时b还未声明,这就是暂时性死区)
    

const命令

const命令的特点:

  • const 声明一个常量

    // 该常量值声明后不能改变
    const num = 2022;
    console.log(num); // 2022
    num = 2023;
    console.log(num); // 报错
    
  • const声明变量时必须初始化

    const num; // 报错
    
  • constlet命令有相同特点

    // 只在所声明的块级作用域中有效。
    {
      const YEAR = 1997;
    }
    console.log(YEAR); // 报错
    
    // 不得重复声明。
    function num() {
      let a = 123;
      const a = 456;
    } // 报错
    
    // 存在暂时性死区。
    function num() {
      console.log(a);
      const a = 456;
    }
    num(); // 报错