ブロックレベルスコープes6--

ホイスト1.varと変数の宣言

  文の現在のスコープの最上位で変数になるようヴァール変数は、関数やグローバルスコープのスコープ内で宣言しました

  例:

    関数のgetValue(条件){           

      IF(条件){                

        VaRの値が "青" =;               

        値を返します。                  

      } そうしないと {                        

        //ここでは、変数の値にアクセスするには、その値が定義されていません                 

        ヌルを返します。                             

      }                                   

      //ここでは、変数の値にアクセスするには、その値が定義されていません         

    }

  上記は、と同等です。

    関数のgetValue(条件){  

      値でした。         

      IF(条件){                

        値=「青」;               

        値を返します。                  

      } そうしないと {                        

        //ここでは、変数の値にアクセスするには、その値が定義されていません                 

        ヌルを返します。                             

      }                                   

      //ここでは、変数の値にアクセスするには、その値が定義されていません         

    }

 

 

2.ブロックレベルの宣言

  1)及び現在のブロック(文字と{}との間の内部機能、B。ブロック(領域))の変数の範囲を制限することができ、変数の宣言は、改善されません、変数は、constと宣言させそして、スコープの定義の範囲外のアクセス変数はできません

   

  例:

    関数のgetValue(条件){                       

      IF(条件){

        //これは、ステートメントはエラーになります一時的なデッドゾーン(時間デッド・ゾーン)、使用にconsole.log(typeof演算値)です。JavaScriptエンジンが変数宣言スキャンコードで見つかった、または(varステートメントを経験する)の範囲の一番上にそれらを高める、のいずれかのステートメントでTDZを入れて(と遭遇したのconst文を聞かせて)いるので。TDZアクセス変数は、実行時エラーがトリガされます。唯一の変数宣言文が実行され、変数はTDZから削除した後、前の通常アクセスされます。

        値が「青」=ましょう。

        値を返します。

      } そうしないと {

        //変数の値は、ここでは存在しません。

        ヌルを返します。

      } 

      //変数の値は、ここでは存在しません。

    }

 

  2)禁止の再宣言:同じスコープを聞かせたりconstが重複して定義、既存の識別子はできません

    例:どこのカウント= 30;

      //構文エラーを投げます

       聞かせてカウント数= 40;

  

  3)constは声明

    設定され、その値を変更することはできません一度のconst宣言は、一定です。そのため、それぞれのconstで宣言された定数で初期化する必要があります

      例:CONST maxItems = 30。

        constの名前; //構文エラー:初期化されていない定数

    constの声明や宣言は非常に異なるもの、です聞かせてそれ以外の場合はエラーがスローされます、再び定数のconst定義代入ありません

    constのバインディング宣言を変更することができますが、あなたが値を変更することができません。すなわち、オブジェクトは、constの宣言されたオブジェクトの属性値を変更することができます

 

3.ブロックスコープ結合ループ

  ] [=のfuncsました。

  以下のために(聞かせて私は= 0; I <10; I ++){// 注:constのここで宣言した場合、エラーがスローされます。ループの最初の反復において、iは0であるので、反復が正常に実行されました。この文の試みは、定数を変更し、したがって、エラーをスローするため、そして私++、行います。

    funcs.push(関数は、(){      変数は次のサイクルを変更していないのであれば、それは、動作中、またはFOR-のループCONSTを使用しては同じせCONST、すなわち、宣言することができます。

      console.log(I);

    });

  }

  funcs.forEach(ファンクション(FUNC){

    FUNC(); 9まで//出力0、次に1、2、; VAR定義された可変出力10 10もし

  }

 

 

前記グローバルブロックの範囲は、結合

  VARは、グローバルスコープのために使用される場合、それはvarとグローバルプロパティを使用して、手段が誤って既存を上書きすることができるプロパティのグローバルオブジェクト(ウィンドウオブジェクトブラウザ環境)として新たなグローバル変数を作成します;

  そして、のconstをさせたり、使用、新しいバインディング、グローバルスコープの下に作成されますが、それはLETまたはconstのグローバル変数をオーバーライドすることはできませんし、他の言葉で、グローバルオブジェクトの結合特性に追加しますが、それだけをマスキングしていません;

  = 1があります。

  B = 2ましょう。

  console.log(A)。// 1

  console.log(window.a)。// 1

  console.log(B)。// 2

  console.log(window.b)。// undefind

 

 

概要:現在のベストプラクティスのブロック・レベルのバインディングを使用することです:のみを使用し、実際に変数の値を変更する必要があり、デフォルトの使用のconstをしましょう。いくつかのエラーを防止するように、これは、ある程度不変コードに達成することができます。

    

おすすめ

転載: www.cnblogs.com/wxl99180426/p/12104629.html