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,

 

转载于:https://www.cnblogs.com/zzzha/p/8551639.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值