小生愛

        /**
            *   例1. let只在命令所在代码块内有效
        */
        {
            let a = 10;
            var b = 1;
        }

        // let 只在声明的代码块内有效
        // 这里会报ReferenceError(引用错误)
        console.log(a);
        console.log(b);





        /**
            *   例2. let只在命令所在代码块内有效
        */
        var arr1 = [];
        // 每次循环i只在本轮循环有效
        for(let i=0; i<10; i++){
            arr1[i] = function (){
                console.log(i);
            };
        }
        // 输出6
        arr1[6]();




        /**
            *   let声明的变量必须要 先声明 再使用
        */
        // 输出ReferenceError(引用错误)
        console.log(foo);
        let foo = 2;




        /**
            *   块级作用域内存在let命令 它所声明的变量就绑定这个区域 不再受外部的影响
        */
        var tmp = 123;
        if(true){
            // tmp绑定let声明的这个块级作用域 输出ReferenceError(引用错误)
            tmp = 'abc';
            let tmp;
        }




        /**
            *   let 不允许重复声明
        */
        function met1(arg){
            // let 声明的变量不允许重复声明 否则报错
            let arg = '小花';
            let a = 10;
            var a = 1;
        };
        met1();




        /**
            *   例一. const 声明常量 一旦声明 常量的值就不能改变 
        */
        'use strict';
        // const 定义常量pi
        const pi = 3.1415;
        // 输出3.1415
        console(pi);
        pi = 4;
        // 输出错误
        console.log(pi);




        /**
            *    例二. const 声明的常量只在块级作用域内有效
        */
        'use strict'

        if(true){
            const max = 5;
        }

        // 输出ReferenceError(引用错误)
        console.log(max);




        /**
            *   例三. const 声明的变量不能重复
        */
        // 输出错误
        const con1 = 1;
        const con1 = 2;




        /**
            *   例四. 对于复合类型的变量 const声明的变量名不指向数据 而是指向数据所在的地址 
                      const命令只是保证变量名指向的地址不变 并不保证该地址的数据不变
        */
        'use strict'
        const foo = {};
        foo.prop = 123;

        // 修改变量的地址报错 必须是严格模式下
        foo = {};
下载源码