ES6学习之let声明变量的学习

Posted heheblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6学习之let声明变量的学习相关的知识,希望对你有一定的参考价值。

1.let和var类似,

(1)let与var不同的let没有预编译,变量提升这个过程,let声明的变量只能在当前作用域内访问到(一个{}可以看做是一个作用域)

 

 let a = 12;
    (function () {

        console.log(a);  
        let a = 5;
    }());

    可见上面代码中是会报错的,如果a是var声明的,那么就不会报错、输出a的值是undefined

 

(2)虽然说let声明的变量不允许重复声明,但是在for循环中貌似又是可以的

技术分享图片
 for (let i = 0; i < 10; i++) {
        let i = "abc";
        console.log(i);    //这里输出的是abc
    }
View Code

    上面for声明i的小括号可以看做是一个父级作用域,{}执行体可以看做是子级作用域,具体for为什么可以重复声明我也不是很清楚。。

(3)块级作用域{},在es6当中引入块级作用域,每个{}都属于一个块级,然而每个块级的中的变量都是相互隔离的访问不到的

技术分享图片
//块级作用域
    {
        let ooo = 13;
        {
            let ooo = 18;
            console.log(ooo);    //18
        }
        console.log(ooo);    //13
    }
View Code

    

{
        let ooo = 13;
        {
      
            console.log(ooo);  //报错 (此处为死区)
            let ooo = 12;
        }
        console.log(ooo);
    }   

(4)let关键字和var关键字在for中的区别

技术分享图片
 var arr = [];
    for (var i = 0; i < 10; i++) {
        arr[i]=function(){
            console.log(i);
        }
    }
    arr[6]();       //输出的是10    

    var arr = [];
    for (let i = 0; i < 10; i++) {
        arr[i]=function(){
            console.log(i);
        }
    }
    arr[2]();       //输出的是2
View Code

    for循环中用var声明的最后输出的是10大家应该都是知道。因为在函数执行的时候i已经变成10了而为什么let声明的却不是10呢,是因为let声明的变量只在本轮循环有效,所以每一次循环i都是一个新的变量,所以最后输出的是6。有点疑惑的是,如果说每次i都是重新声明的,那怎么知道上一轮循环的是多少,从而计算出本轮循环的值?这是因为javascript引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。

以上是关于ES6学习之let声明变量的学习的主要内容,如果未能解决你的问题,请参考以下文章

ES6学习之let和const

ES6学习笔记

ES6学习之const声明常量的学习

ES6学习之关键字

ES6学习之变量的解构赋值

ES6学习笔记之变量声明let,const