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

  • 相关阅读:
    编译原理笔记 2
    编译原理笔记 1
    初步学习计算机图形学 [闫令琪]
    复杂 Web 前端的设计
    使用 GitHub Actions 部署 .Net 5 程序
    ES 2020 Optional Chain (可选链)
    2020 Web 前端学习记录
    WPF TreeView 支持多选
    linux (CentOS 7)报错:yum 命令报错 “ Cannot find a valid baseurl for repo: base/7/x86_6 ”
    node.js 报错
  • 原文地址:https://www.cnblogs.com/zzzha/p/8551639.html
Copyright © 2011-2022 走看看