zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    双端队列广搜
    多源bfs
    leetcode刷题-67二进制求和
    leetcode刷题-66加一
    leetcode刷题-64最小路径和
    leetcode刷题-62不同路径2
    leetcode刷题-62不同路径
    leetcode刷题-61旋转链表
    leetcode刷题-60第k个队列
    leetcode刷题-59螺旋矩阵2
  • 原文地址:https://www.cnblogs.com/yaowen/p/6962620.html
Copyright © 2011-2022 走看看