• es62


    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>let用途</title>
    <script src="../../../vendor/traceur.js"></script>
    <script src="../../../vendor/bootstrap.js"></script>
    <script type="text/traceur">
    
    /*ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
     
    let不像var那样,会发生“变量提升”现象。
    
    只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
    
    let不允许在相同作用域内,重复声明同一个变量。
    */
    
        var a = 100;
        let b = 200;
        console.log(a);    //100
        console.log(b);    //200
        
        
        {
            var a = 100;
            let b = 200;//大括号作用范围,不是函数作用域,
        }
        console.log(a);    //100
        console.log(b);    //b is not defined -- Error
        
    -------------------------------------------------------------------    
        
        {
            var a = 100;
            let b = 200;//大括号作用范围,不是函数作用域,
            
            var d = b;
            var e = a;//语句已经执行了,进行了值传递,后面变量销毁和重新赋值不影响
        }
        a = 300;
        console.log(a);    //300
        console.log(d);    //200
        console.log(e);    //100
        //console.log(b);    //b is not defined -- Error
        
        
        for (let j = 0; j < 3; j++) 
        {
            console.log(j);//0,1,2
        };
        
        public static void main (String[] args) throws java.lang.Exception
        {
            int a = 3;
            {
               int b = a;
               a = 5;
               System.out.println(b);//3
            }
            
            
        }
        
        var a = 1;
        var a = 2;
        console.log(a);//2   
    </script>
    </head>
    <body>
    
    </body>
    </html>
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>let不存在变量提升</title>
    <script src="../../../vendor/traceur.js"></script>
    <script src="../../../vendor/bootstrap.js"></script>
    <script type="text/traceur">
        //ES5
        console.log("ES5:");
        var a = [];
        for (var i = 0; i < 10; i++) 
        {
            var c = i;
            a[i] = function () {
                console.log(c);//基本变量是值传递,只有这行语句执行的时候,才会使用到c的值,此时c已经变成了9
            };
            console.log(a[i]);
        };
        
        a[5]();    //9
    
        //ES6
        console.log("ES6:");
        var b = [];
        for (var j = 0; j < 10; j++) 
        {
            let d = j;//每次都声明一个新的变量d,var不是,每次都是用之前声明的变量c,语句执行之前不会进行预加载,
            b[j] = function () {
                console.log(d);//这行语句执行的时候,使用的是d的值,而每一个d都是一个新的d值不一样
            };
        };
        b[5]();    //5
    </script>
    </head>
    <body>
    
    </body>
    </html>
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>let暂时性死区</title>
    <script src="../../../vendor/traceur.js"></script>
    <script src="../../../vendor/bootstrap.js"></script>
    <script type="text/traceur">
        {
            console.log(a);    //undefined 语句执行之前不会进行预加载,
            let a = 100;
        }
        {
            let a = 100;
            console.log(a);    //100
        }
    -------------------------------------------------------
        var a = 200;
        {
            
            console.log(a);    //undefined,不能用外部的a了,大括号里面都是let的a,
            let a = 100; //从声明的地方开始才能使用变量a
            console.log(a);    //100,不受外部影响。
        }
        
        
        {
            var a = 100;
            var a = 200;
            console.log(a);
        }
        // 报错
        {
            var b = 100;
            let b = 200;
            console.log(b);
        }
        // 报错
        {
            let c = 100;
            var c = 200;
            console.log(c);
        }
        // 报错
        {
            let d = 100;
            let d = 200;
            console.log(d);
        }
        
        
            // 模块之间不影响,可以重复声明
        {
            var a = 100;
            var a = 200;
            console.log(a);
        }
        {
            let a = 300;
            console.log(a);
        }
        // 模块内部不允许用let命令重复声明
        {
            var a = 1;
            let a = 2;
        }
    </script>
    </head>
    <body>
    
    </body>
    </html>

     let只在大括号内有效,并且优先级高于var。

  • 相关阅读:
    Windows server 2008 R2充当路由器实现网络的互联(转)
    sqlserver内存释放心得
    收藏一个好用的base64编解码网址
    最后一篇,说好的开源来了!
    python五子棋
    flask使用原生ajax、不使用表单(Form)上传文件
    使用keras的LSTM进行预测----实战练习
    keras神经网络三个例子
    【强化学习】用pandas 与 numpy 分别实现 q-learning, saras, saras(lambda)算法
    【转】【强化学习】Deep Q Network(DQN)算法详解
  • 原文地址:https://www.cnblogs.com/yaowen/p/6962620.html
Copyright © 2020-2023  润新知