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,

  • 相关阅读:
    浅析:setsockopt()改善socket网络程序的健壮性
    神奇的vfork
    2008级 毕业设计 题目
    Linux之父访谈录:设计内核只为了好玩
    启用Fedora的root账户登录
    Linux系统所使用的真实内存——free
    linux内核源码中常见宏标志tag
    c语言中的 顺序点
    tcpdump
    双系统中从Windows访问Linux分区 ext2 ext3 的三种方法
  • 原文地址:https://www.cnblogs.com/zzzha/p/8551639.html
Copyright © 2011-2022 走看看