ES6块级作用域详解

ES6块级作用域详解

  1. 在ES5中,只有全局作用域和函数作用域,没有块级作用域,而let实际上为JavaScript新增了块级作用域
        function f1() {
            let n = 5;
            if (true) {
                let n = 10;
            }
            console.log(n);
        }
        f1(); //5

上述代码有两个代码块,都声明了变量n,但输出结果却是5,说明,外层代码块不受内层代码块的影响,但如果使用var,输出结果就是10

        function f2() {
            var n = 5;
            if (true) {
                var n = 10;
            }
            console.log(n);
        }
        f2(); //10
  1. ES6允许块级作用域的任意嵌套,外层作用域无法访问内层作用域的变量,但是内层作用域可以定义外层作用域的同名变量
        {
            {
                let n = 10;
            }
            console.log(n);//Error,不能在变量所在的块级作用域之外访问此变量
        }
  1. 块级作用域的出现,使立即执行匿名函数(IIFE)不再必要了
        (function() {
            var temp;
        }());
        {
            let temp;
        }
        //上述立即执行匿名函数与let所在代码块的作用都是一样的,都是在块级作用域中声明变量temp

ES6引入了块级作用域,明确允许在块级作用域之中声明函数,且函数声明语句的行为类似于let,在块级作用域之外不可引用,且应该避免在块级作用域中定义函数,若实在不行,使用函数表达式的形式,而不是函数声明语句,且在块级作用域只能将声明的函数放在大括号内

猜你喜欢

转载自blog.csdn.net/Angela_Connie/article/details/110761878