zoukankan      html  css  js  c++  java
  • let变量声明总结

    let命令有四大主要特性:存在块级作用域没有变量提升暂时性死区不允许重复声明

    这都是和es5的var变量特性相反的。

     

    1、存在块级作用域

    let命令声明的变量只在其块级作用域中有效,就是{}中。

    {
      let a = 10;
      var b = 1;
    }
    console.log(a); //出错 not defined
    console.log(b); //1

    es5中要实现块级作用域,通常借助立即执行匿名函数来实现:

    (function(){
      var a = 1;
    }());
    console.log(a); //出错,not defined

    但是有了let之后,就像C语言一样,直接就是:

    {
      let a = 1;
    }
    console.log(a); //出错, not defined

     

    2、没有变量提升

    也正因如此,变量必须在声明后使用,否则会报错。

    console.log(a); //出错, not defined
    let a = 1; 

    对比var经典的变量提升

    console.log(a); //undefined
    var a =1;

     

    3、暂时性死区

    在块级作用域内,若存在用let命令声明的变量,则所在区块对该变量形成封闭作用域,也就是该变量无视外部的同名变量。而又因为不存在变量提升,所以在该区块中,不能在声明前使用该变量。

    var a  = 1;
    if(true){
      a = 2; //出错 not defined
      let a; 
    }

    对比var

    var a = 1;
    if(true){
      a = 2; //var允许重复声明,而且变量提升,故a=2正常赋值
    var a;
    }

     

    4、不允许重复调用

    let不可以在相同作用域内重复声明同一个变量,也包括不能和var,const变量名重复

    let a = 1;
    let a = 1; //出错 let不可重复声明
    
    var b = 1;
    let b = 1; //出错 let不可重复声明
    
    const c = 1;
    let c = 1; //出错 let不可重复声明

     

  • 相关阅读:
    新思路,坚持创新;好想法,坚持执行
    新的一年,新的梦想
    新的一年,新的梦想
    大秦帝国-《治秦九论》
    大秦帝国-《治秦九论》
    大学生应当趁早谋划未来(二)--给表弟的建议
    大学生应当趁早谋划未来(二)--给表弟的建议
    解读OpenRTB(实时竞价)生态系统
    Java实现蓝桥杯VIP 算法训练 阶乘末尾
    Java实现 蓝桥杯VIP 算法训练 sign函数
  • 原文地址:https://www.cnblogs.com/zhenwen/p/5709495.html
Copyright © 2011-2022 走看看