let命令的语法

1.基本用法

let的用法与var基本类似,但仅在其声明的代码块内作用

    {
        var a = 123;
        let b = 456;
    }
    console.log(a);
    console.log(b); //ReferenceError: b is not defined

同理,在循环语句里也可以体现

    for(var i = 0; i < 4; i++){
    }
    for(let j = 0; j < 5; j++){
    }
    console.log(i); //4
    console.log(j); //ReferenceError: j is not defined

2.不存在变量提升

可以理解为var的镜面效果。由let声明的变量不能在该变量声明之前使用,否则会报错。而由var声明的变量可以提前使用,但值为undefined。关于“什么是变量提升”可以查看上一篇文章。

    console.log(b);
    let b = 2;  //ReferenceError: Cannot access 'b' before initialization

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

3.暂时性死区

在一个代码块中,由let声明的变量,在其声明之前该变量是不能使用的。这个区块对这些let声明的变量,从一开始就形成了封闭作用域。而这个封闭作用域就是“暂时性死区(temporal dead zone,简称 TDZ)”

    if(true){
        //TDZ开始
        a = 1;  //ReferenceError: Cannot access 'a' before initialization
        console.log(a); //ReferenceError: Cannot access 'a' before initialization

        let a; //TDZ结束
        console.log(a); //undefined

        a = 2;
        console.log(a); //2
    }

4.不允许重复声明

    if(true){
        var a;  //SyntaxError: Identifier 'a' has already been declared
        let a;
    }
    if(true){
        let a;  //SyntaxError: Identifier 'a' has already been declared
        let a;
    }
    function fun(a){
        let a;  //SyntaxError: Identifier 'a' has already been declared
    }
    fun();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值