沁園春 2021-03-18 15:11 采纳率: 33.3%
浏览 91
已结题

const和let这个东西这么鸡肋,到底有什么用

  • 我们以前都是使用 var 关键字来声明变量的

  • 在 ES6 的时候,多了两个关键字 let 和 const,也是用来声明变量的

  • 只不过和 var 有一些区别

    1. let 和 const 不允许重复声明变量
    // 使用 var 的时候重复声明变量是没问题的,只不过就是后面会把前面覆盖掉
    var num = 100
    var num = 200
    
    // 使用 let 重复声明变量的时候就会报错了
    let num = 100
    let num = 200 // 这里就会报错了
    
    // 使用 const 重复声明变量的时候就会报错
    const num = 100
    const num = 200 // 这里就会报错了
    
    1. let 和 const 声明的变量不会在预解析的时候解析(也就是没有变量提升)

      // 因为预解析(变量提升)的原因,在前面是有这个变量的,只不过没有赋值
      console.log(num) // undefined
      var num = 100
      
      // 因为 let 不会进行预解析(变量提升),所以直接报错了
      console.log(num) // undefined
      let num = 100
      
      // 因为 const 不会进行预解析(变量提升),所以直接报错了
      console.log(num) // undefined
      const num = 100
      
    2. let 和 const 声明的变量会被所有代码块限制作用范围

      // var 声明的变量只有函数能限制其作用域,其他的不能限制
      if (true) {
        var num = 100
      }
      console.log(num) // 100
      
      // let 声明的变量,除了函数可以限制,所有的代码块都可以限制其作用域(if/while/for/...)
      if (true) {
        let num = 100
        console.log(num) // 100
      }
      console.log(num) // 报错
      
      // const 声明的变量,除了函数可以限制,所有的代码块都可以限制其作用域(if/while/for/...)
      if (true) {
        const num = 100
        console.log(num) // 100
      }
      console.log(num) // 报错
      
  • let 和 const 的区别

    1. let 声明的变量的值可以改变,const 声明的变量的值不可以改变

      let num = 100
      num = 200
      console.log(num) // 200
      
      const num = 100
      num = 200 // 这里就会报错了,因为 const 声明的变量值不可以改变(我们也叫做常量)
      
    2. let 声明的时候可以不赋值,const 声明的时候必须赋值

      let num
      num = 100
      console.log(num) // 100
      
      const num // 这里就会报错了,因为 const 声明的时候必须赋值
  • 写回答

2条回答 默认 最新

  • 土拨鼠1号 2021-03-18 15:20
    关注

    const类似于常量,是不支持值改变的, let声明的变量在当前方法运行结束后就被回收了.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月20日
  • 已采纳回答 11月12日

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作