• es6块级作用域


    一.为什么需要块级作用域:

    1.es5中只有全局作用域和块级作用域,内层变量可能会覆盖外层变量

    var time=new Date();//全局变量
    function fun(){
        console.log(time);
        if(false){
        var time="hello world";
        };
    };
    fun();//undefined

      没有输出new Date();因为在调用函数时,输出time,time为全局值,由于在函数里面有var函数内部的time会覆盖外面的time的地址,找不到time的地址,所以就不能找到time的值

    2.用来计数的循环变量泄露为全局变量

    var string="hello world";
    for(var i=0;i<string.length;i++){
        console.log(string[i]);
    };
    console.log("循环结束");
    console(i);//12(i跳出了循环体)

    二.es6的块级作用域

    let、const为javascript新增了块级作用域。

    //es5
    console.log("es5:");
    function fun(){
        var num=100;
        if(true){
            var num=200;
        }
        consloe.log(num);
    }
    fun();//200;
    
    //es6
    console.log("es6:");
    function fun(){
        let num=100;
        if(true){
            let num=200;
        }
        consloe.log(num);
    }
    fun();//100;

      es5中的var结果为200因为内层变量影响到了外层变量,所以200覆盖100,es6中,内部不会影响外部,为两个相对独立的作用域

    //es5----------------------------
    function fun(){
        console.log("i love you");
    }
    
    
    (function (){
    if(false){
        function fun(){
        console.log("i love him");
        };
    };
    
            fun();//i love you
    }());//立即执行函数,不管判断会先执行,后面的会覆盖外面的fun()的
    
    //es6:---------------------------
    
    function fun(){
        console.log("i love him");
    }
    {
        if(false){
        function fun(){
                console.log("i love you");
            };
        };
        fun();//i love him(内部模块不会影响外部模块)
    };

      在let和const中,有限使用const,

  • 相关阅读:
    Mac + Python3 安装scrapy
    Pyqt4+Eric6+python2.7.13(windows)
    js基础⑥
    python模块之os,sys
    Python模块之random
    Python模块之PIL
    js基础⑤
    js基础④
    js基础③
    centOS目录结构详细版
  • 原文地址:https://www.cnblogs.com/zzzha/p/8551639.html
Copyright © 2020-2023  润新知