【ES6】let 命令

let命令:用于声明变量,类似于var,但声明的变量只在let命令所在的代码块作用域内有效。

最经典的对比:

//场景1:
var a=[];
for(var i=0;i<10;i++){
    a[i]=function(){
        console.log(i);
    };
}
a[6]();//10


//场景2:
var a=[];
for(let i=0;i<10;i++){
    a[i]=function(){
        console.log(i);
    };
}
a[6]();//6

场景1中,i是var声明的,只用来控制循环,但是循环结束后并没有消失,而是泄露成了全局函数,所以,i最终值为10;场景2中,i是let声明的块级变量,在每循环一次,就相当于重新创建一个新的变量,循环结束后总共创建了10个块级变量i,且他们之间不会相互影响,所以a[6]()的结果为6。

let 特性

  • 不存在变量提升
    let定义的变量一定要在声明后使用,否则报错。
//let 和 var 对比

//场景1
console.log(s);//abc
var s='abc';

//场景2
console.log(s);//ReferenceError
let s='abc';

//场景1在执行时时这样的:
var s='abc';//定义语句会被提升上来
console.log(s);//abc
  • 暂时性死区
    只要块级作用域内存在let命令,它声明的变量机会“绑定”(binding)在这个区域,不再受外部影响。

if(true){
    s='abc';
    console.log(s);//ReferenceError
    let s;                           //这里是导致上面报错的原因
    console.log(s);//undefined
    s='abc';
    console.log(s);//abc
}
//尝试理解这段代码,就能明白暂时性死区,let声明后才能使用。
  • 不允许重复声明
    let不允许在相同作用域内重复声明同一变量,内层作用域可以声明外层作用域的同名变量。(这里重点强调同一作用域)
//报错
function(){
    let a=10;
    var a=10;
    //var a=10;
    //let a=10;
}

//报错
function(){
    let a=10;
    let a=1;
}

因此,不能再函数的内部重新声明参数。

function(i){
    let i; //报错
}


function(i){
    {
        let i; //不报错
    }
}

ES5中仅有两种方法声明变量:var命令 和 function命令,而ES6一共有6种,除了var | let | function 外还有三种方法:const | import | class ,下次总结。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值