zoukankan      html  css  js  c++  java
  • ES6学习之let声明变量的学习

    1.let和var类似,

    (1)let与var不同的点:let没有预编译,变量提升这个过程,let声明的变量只能在当前作用域内访问到(一个{}可以看做是一个作用域),在全局var声明的变量属于window,而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时,就在上一轮循环的基础上进行计算。

  • 相关阅读:
    Guava布隆过滤器实战应用
    结合阿里代码规范约定+源码剖析属性拷贝性能安全问题
    comparatorChain实现对Bean多字段排序
    python ibm_db模块的使用
    Linux6.5编译安装mysql5.7.19
    3.1 创建预配置管理资料数据库
    redis环境搭建及一主二从三哨兵模式配置
    一次生产环境搭建11g RAC的记录
    绑定变量
    oracle 10g 搭建备库以及一次DG GAP的处理情况
  • 原文地址:https://www.cnblogs.com/heheblog/p/JavaScript_study_let.html
Copyright © 2011-2022 走看看