【ES6】let 命令

偏执的太偏执、 2022-06-06 00:12 253阅读 0赞

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

最经典的对比:

  1. //场景1:
  2. var a=[];
  3. for(var i=0;i<10;i++){
  4. a[i]=function(){
  5. console.log(i);
  6. };
  7. }
  8. a[6]();//10
  9. //场景2:
  10. var a=[];
  11. for(let i=0;i<10;i++){
  12. a[i]=function(){
  13. console.log(i);
  14. };
  15. }
  16. 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){

    1. s='abc';
    2. console.log(s);//ReferenceError
    3. let s; //这里是导致上面报错的原因
    4. console.log(s);//undefined
    5. s='abc';
    6. console.log(s);//abc

    }
    //尝试理解这段代码,就能明白暂时性死区,let声明后才能使用。

  • 不允许重复声明
    let不允许在相同作用域内重复声明同一变量,内层作用域可以声明外层作用域的同名变量。(这里重点强调同一作用域)

    //报错
    function(){

    1. let a=10;
    2. var a=10;
    3. //var a=10;
    4. //let a=10;

    }

    //报错
    function(){

    1. let a=10;
    2. let a=1;

    }

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

  1. function(i){
  2. let i; //报错
  3. }
  4. function(i){
  5. {
  6. let i; //不报错
  7. }
  8. }

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

发表评论

表情:
评论列表 (有 0 条评论,253人围观)

还没有评论,来说两句吧...

相关阅读

    相关 浅谈ES6 let命令

               对let命令的理解 (a)基本用法介绍 ![这里写图片描述][20160413152025991]      ES6新增了let命令,用来声明变

    相关 es6 let 和 const 命令

    一.let 1.作用域 在javascript中只有全局作用域和函数作用域,并不存在块级作用域。这样,在使用时就会出现一些问题。 下面我们先来举例说明let块级作用