ES6ブロックレベルスコープの詳細

ES6ブロックレベルスコープの詳細

  1. ES5では、グローバルスコープと関数スコープのみがあり、ブロックレベルのスコープはありません。実際にJavaScriptにブロックレベルのスコープを追加しましょう。
        function f1() {
            let n = 5;
            if (true) {
                let n = 10;
            }
            console.log(n);
        }
        f1(); //5

上記のコードには2つのコードブロックがあり、どちらも変数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