zoukankan      html  css  js  c++  java
  • es6的let,const

    1.es6 新增的let const 命令

      let用来定义一个局部变量,故名思意就是只在当前代码块可用

      1.1 let 声明的变量不存在变量提升(var 声明的变量存在变量提升)且代码块内 暂时性死区 且不允许重复声明

        列子

    var b = 3;
    function fn () {
        console.log (b)
        var b = 4
    }
    fn(); // undefined 
    //由于存在变量提升 实际代码是
    /* var b = 3;
    function fn () {
        var b = undefined
        console.log (b)
        b = 4
    } */
    //使用let 定义
    function fn1() {
        console.log (b)
        let b = 4
    }
    fn1();
    //报错 提示b没有定义   使用let 定义的b 不存在变量提升 并且也访问不到外面定义的b ,暂时性死区
     function fn2() {
      let aa = 3
      let aa = 4
     }
       fn2() //报错,dentifier 'aa' has already been declared 不能重复定义

      1.2 const 常量

      定义:声明后的常量就不能修改,不能重复定义 ,也只在当前代码块内有用,常量定义时必须先赋值

    const ba  //报错必须先赋值
    
    {
        const bb = 4
    }
    console.log(bb) //bb未定义, 只在当前代码块可用
    
    const bc = 56
    bc = 54 //报错,常量定义后不能修改值
    
    const person = {
        name: 'czklove',
        age: '18' 
    }
    person.age = 24 // 不报错,对于引用类型,常量只是不改变他的地址
    //可以使用 Object.freeze 冻结
    const child = Object.freeze({
        name: 'czklove',
        age: '18'
    })
    child.name = 'lll' //正常模式下该行代码忽略 严格模式下报错
    
    //如果对象的属性也是引用类型 ,则需要冻结对象上所有的属性,调用递归的方法
    

      1.3 var 

      es6 之前除了在方法里定义的var 变量之外,所有var 定义的var 变量都是全局可用

    var c = 44
    function fn3() {
        c = 56
        b = 45
    }
    console.log(b) //报错 b没有定义
    for(var i = 1;i < 9; i++) {
    }
    console.log(i) //9  for ()里定义的变量 全局可用 
    //变量声明提升 可以见let 的例子
    

      

      

      

  • 相关阅读:
    [Tips] 树莓派VNC登录
    [Tips] 联通宽带+华为路由器,如何进行NAT
    [Tips] 树莓派4B 风扇安装
    [Tips] 家庭树莓派,如何外网访问
    [Tips] 命令行获取设备的外网IP
    MySQL 如何让自增id设置为从1开始
    MySQL报错:Packet for query is too large (2,588 > 2,048).
    Java 实现 Timstamp 和 String 互相转换
    MySQL修改 mysql-bin 日志保存天数以及文件大小限制
    Linux Shell 中的年月日 时分秒
  • 原文地址:https://www.cnblogs.com/czkolve/p/10596009.html
Copyright © 2011-2022 走看看