js 块级作用域 ES6

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>块级作用域</title>
</head>
<body>

<!-- <script type="text/javascript">
    // {}包含的范围 是块级作用域
    // 块级作用域中,使用var声明的变量,依然是全局变量
    {
        var a = 100;
        console.log(a);
    }
    console.log(a);

    // let 声明块级变量 只能在当前的块级作用域使用
    {
        let b = 200;
        console.log(b);
    }
    console.log(b);//报错

</script> -->
<!-- <script type="text/javascript">
    //if 代码块
    if(true){
        let c = 300;
        console.log(c);
    }
    console.log(c); //报错
</script> -->
<!-- <script type="text/javascript">
    //块级作用域  没有变量提升
    {
        // console.log(d);
        // let d = 400;
    }
</script> -->
<!-- <script type="text/javascript">
    //块级作用域  只有块级变量概念,没有块级函数概念
    {
        //function关键字定义的函数,就是全局函数
        fn();
        function fn(){
            console.log(500);
        }

        let f1 = function(){} //属于块级变量,这种函数不会预加载
    }
    fn();
</script> -->
<!-- <script type="text/javascript">
    //let定义块级变量,一般不要在全局直接用
    //全局使用var
    // let num = 100;
    // console.log(100);
    // let num = 200; //会报错
    {
        let a = 100;
        console.log(a);
        //同一个块级作用域中,块级变量可以重新赋值
        a = 200;
        console.log(a);
        a = 400;
        console.log(a);
        //同一个块级作用域中,块级变量不能重复声明
        // let a = 300; //报错
        // console.log(a);
    }
</script> -->
<script type="text/javascript">
    //for循环i丢失的问题
    //循环绑定事件、循环设置定时器(指定的函数,在循环结束后才调用)
    /*for(var i=0; i<5; i++){
        //设置定时器,1秒后,输出循环变量i的值
        (function(m){
            setTimeout(function(){
                console.log(m);
            }, 1000);
        })(i);
    }*/

    for(let i=0; i<5; i++){
        //设置定时器,1秒后,输出循环变量i的值
        //每次循环,都会产生一个块级作用域,其中的块级变量i 互相不影响
        setTimeout(function(){
            console.log(i);
        }, 1000);
    }
</script>
</body>
</html>

 

posted @ 2021-02-25 12:57  华北业余选手  阅读(41)  评论(0)    收藏  举报