let/const 和 var 的区别

  1. let和const不存在变量提升机制

    创建变量的六种方式中:var/function有变量提升,而let/const/class/import都不存在这个机制

  2. 在相同作用域中(或执行上下文中)var允许重复声明,而let是不允许的

    var/function在相同作用域中,可以重复声明,但声明第一次后,再遇到则不再声明
    使用let/const声明,浏览器会校验当前作用域中是否已经存在这个变量

    在浏览器开辟栈内存供代码自上而下执行之前,不仅有变量提升的操作,还有很多其他的操作: ”词法解析“或者”词法检测“,检测当前即将要执行的代码是否会出现“语法错误 SyntaxError”,如果出现错误,代码将不会再执行。(第一行都不执行)

    console.log(1);
    let a = 12;
    console.log(a);
    let a = 13;
    console.log(a);
    
  3. let能解决typeof检测时出现的暂时性死区问题

    console.log(typeof a); // "undefined",本应报错因为没有a (暂时性死区)
    // ------------------------
    console.log(typeof a); // Cannot access 'a' before initialization
    let a;
    
  4. 在全局作用域下,带var/function声明的全局变量相当于给window设置了对应的属性,不带var等声明的只是给window设置了对应的属性,如果是使用了let/const声明的,只是全局变量,没有给window设置属性

    let a = 10;
    console.log(window.a); // undefined
    var b = 20;
    console.log(window.b); // 20
    
  5. let产生块级作用域

    let foo = 1;
    function bar() {
       if (!foo) {
           // 块作用域 foo是块中私有的
           let foo = 10;
       }
       console.log(foo);  // 1
    }
    bar();
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值