ES6 学习系列---《let》

  • 暂时性死区 temporal dead zone TDZ

ES6中规定,区块中存在const/let命令,则该区块对这些命令声明的变量从一开始就形成封闭作用域,只要在声明之前使用这些变量就会报错。

var tmp = 123;
if (true) {
    //TDZ开始
    tmp = 234; //Uncaught ReferenceError: tmp is not defined
    let tmp; //TDZ结束
}
var tmp = 123;
if (true) {
    tmp = 234;
    const tmp; //Uncaught SyntaxError: Missing initializer in const declaration
}
var tmp = 123;
if (true) {
    tmp = 234; // Uncaught ReferenceError: tmp is not defined
    const tmp=123;
}

TDZ本质:进入作用域时,所需变量就已经存在,但是不能获取。只有等到声明变量的那一行出现,才能获取/使用该变量。

let不允许在相同作用域内重复声明同一个变量。

function fun () {
    var a = 20;
    let a = 10;
    console.log(a);
}

fun();// Uncaught SyntaxError: Identifier 'a' has already been declared

function fun (args) {
    let args;
    console.log(args);
}

fun(args); // Uncaught SyntaxError: Identifier 'a' has already been declared
let args;
function fun (args) {
    {
        let args;
        console.log(args);
    }
}

fun(args);

//正确运行:undefined

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值