constと理解しましょう

 基本的な使い方をしましょう
    {
        てみましょう = 1
         VAR B = 2
    }
    console.log(A)     // 捕捉されないにReferenceError:定義されていないキャッチされない基準誤差:ある未定義 
    にconsole.log(B)      // 2
     概念:で{} ES6全て包んコードがブロックレベルの範囲であり、ブロックレベルスコープLETのCONSTで使用されるすべての変数は、一時的な死んで宣言さ
    コードブロックが有効なブロックで有効であるしましょう、VAR効果的なグローバル
 
    文を繰り返すことはできません

    一度だけ宣言とする、varが複数回宣言することができます
  {
        てみましょう = 1 ;
        てみましょう = 2 ;
        あり、B = 3 ;
        あり、B = 4 ;
    }
    console.log(A)      // キャッチされないでSyntaxError:宣言された識別子"A":識別子'A'は、すでにキャッチされない構文エラー宣言されている 
    にconsole.log(B)      // 4
 
 ループカウンタのためのLETに適しています
    ためVAR I = 0、I <10; I ++ ){
        setTimeout(関数(){
            console.log(I);     // 10次10 
        })
    }

    (J ++; J <10 jは= 0せ{)
        setTimeout(関数(){
            console.log(J)。   // 0123456789 
        })
    }

 

     さらに、ループのための特別な機能があり、ループ変数は、親スコープの一部であることを設定し、内部ループは、別個のサブスコープです。
    以下のためのあった I ++; I <3 I = 0 {)
         であった私は'ABC' = 
        console.log(I);      // ABC一度出力
    }


    (J ++; J <3 J = 0せ{)
        Jましょう = 'ABC' 
        console.log(J);      // 出力3 ABC 
    }
   このことは、それぞれ別個のスコープを持つ内部関数ループ変数iおよびiは、同じスコープ内にない変数。

    
何の変数リフトがありません

  状況VAR   
    console.log(B); // 出力不定
    するvar B = 2。

 

    状況をみましょう  
    console.log(A);     // エラーキャッチされないにReferenceError:参照がアクセス「」初期不明なエラーの前にすることはできません:「A」開始する前にすることはできませんアクセス 
    のlet A = 2と、

    宣言の変数に変数varとBのが存在は、スクリプトの実行が開始したとき、bがすでに存在しているので、増加しますが、値がないため、出力は不定となります。

    変数に存在しない、存在しない変数を宣言する前に、あなたがエラーので、変数のリフトを宣言してみましょう。
 
 一時的なデッドゾーン
    ロングブロックレベルのスコープletコマンドが存在する限り、変数は、それがこの分野で「バインド」(結合)、外部の影響をもはや被験者だろう宣言しました。
    あります = 123 ;

    IF真の){
       // はconsole.log(A)//キャッチされないにReferenceError:缶がないアクセスが誤って引用の''の前に初期化キャッチされない:アクセスできません""の前に初期化 
      A = 'ABC' 
      てみましょう。
      // にconsole.log() 
    }
    上記のコードは、グローバル変数TMPがあるが、そうする前に変数、エラーのTMP割り当てを宣言させ、別のブロックレベルのスコープはローカル変数TMP、このブロックレベルの範囲を結合するために、後者を引き起こすを宣言しましょう。
    ES6は、明確に定義された、とconstのコマンドブロックを聞かせている場合、このブロックは、これらは、閉じた範囲を形成するために、最初から、変数宣言を指令します。エラーが報告される前に、文の中でこれらの変数を使用しようとする者たち。
    要するに、宣言変数へのletコマンドの前にコードブロックでは、変数は使用できません。これは、文法的に(TDZと呼ば一時的なデッドゾーン、)「一時的なデッドゾーン」と呼ばれています。
 
 
「一時的なデッドゾーン」も百パーセント安全な操作ももはやtypeofを意味しません。
    typeof演算 X-; // キャッチされないにReferenceError:缶のないアクセス初期キャッチされない参照エラーの前に「X-」:「X」を開始する前にアクセスすることはできません

    Xましょう。
    console.log(typeof演算 X)

  上記のコード、変数はそうステートメントの前に、xの「デッドゾーン」は、letコマンド文を使用して、X、変数は、長いエラーとしてとして使用されます。したがって、それは実行時にReferenceError typeof演算をスローします。

    比較として、もし変数がすべてで宣言されていませんが、typeof演算誤差を使用しません。
    
    typeof演算Y
    console.log(typeof演算 Y)    // 未定義
    上記のコードは、yは変数名が、結果のリターンが「不定」は存在しないです。そのため、不在LETでのtypeof演算子は、与えられたことはありません、100%安全です。さて、これはホールドアップしません。
    この設計は、誰もが良いプログラミング習慣を開発できるようにすることです、変数がステートメントの後で使用されている必要があり、それ以外の場合はエラー。
 
    いくつかの「デッドゾーン」を見つけることは容易ではない、ひそか。
     関数バー(X = Y、Y = 2 ){
       リターン[X、Y]。
    }

    console.log(バー())    // エラーキャッチされないにReferenceError:できないアクセス「Y初期化の前に」 キャッチされない参照エラー:できないアクセス「y」を初期化する前に、

    関数バー(X = 2、Y = X){
       リターン[X、Y]。
    }

    console.log(バー())// [2,2]

 

上記のコードは、なぜ誤差関数呼び出しバー(いくつかのエラーを実現しないかもしれない)理由、パラメータxのデフォルト値は、他のパラメータy、Yが、この時はまだ宣言されていないに等しいので、「デッドゾーン」です。Yのデフォルト値がXである場合、エラーは、xが宣言されていないので。
 
さらに、次のコードは、与えられた、と異なる行動VARされます。    
    あり、X = X;
    console.log(X-)     // エラーなし
  

    yが聞かせて = Y;
    console.log(Y-)   // にReferenceError:Yは-IS定義されていないY-未定義
    

 

    エラー上記が、また、一時的なデッドゾーン理由コード。使用している場合、あなたがいる限り、変数は使用前に宣言完了していないとして、それはエラーになり、変数を宣言しましょう。この場合に、このラインの秋の上に、変数xの宣言は、実行前に完了していない、xの値は、エラーが発生し、ピックアップする「X未定義。」

    ES6一時的な死者の規定としましょう、CONSTステートメントは、主に予期しない動作につながる、防止はあなたが変数の宣言の前に変数を使用することを実行時エラーを減らすために、変数を強化するためには表示されません。ES5でのこのようなエラーは、このようなエラーを回避するのは簡単です、今、このようなAの規定があり、非常に一般的です。

    要するに、デッドゾーンの本質は長く、現在のスコープへの一つとしてとして、一時的なものであり、すでに使用する変数が存在するが、利用可能ではない、とあなたは彼らが変数を取得し、使用する前に表示されるコードの行の変数を宣言するまでの間だけ。
 
    constの基本的な使い方
    constが読み取り専用の定数を宣言します。宣言すると、定数の値を変更することはできません。
    CONST A = 123 = 3 ;
    console.log(A)     // キャッチされない例外TypeError:キャッチされないタイプのエラーコードに割り当て上記定数変数を示し:一定の変数に割り当てられました。

    const変数の宣言は、手段は、一度宣言したのconst変数は、あなたが割り当てに任せることができない近い将来を初期化しなければならない値を、変更することはできません。
    CONST。
    console.log(A)   // にSyntaxError:のconst文で宣言constの初期化子欠落不足している初期化子
 
    上記のコードは、constの文はconstのための初期化子行方不明であることを示し、宣言は唯一の割り当てがエラーをスローしますではありません。

    constの同じスコープとコマンドしてみましょう:のみ、それが効果的に宣言されている領域でブロックレベルの役割を。
    もし){
      CONST A = 5 
    }
    console.log(A)     // キャッチされないにReferenceError:A IS Aは未定義定義されていません

 

    定数constのコマンド文は、アップグレードではなく、一時的なデッドゾーンもある、唯一のバック位置文で使用することができます。

    
    もし){
      console.log(A); // キャッチされないにReferenceError:缶のないアクセス「A」初期キャッチされない参照エラーの前に:缶「A」を開始する前にいないアクセス 
      のconst A = 5 ;
    }

 

    上記のコードは、エラーの結果、一定の宣言の前に呼び出されます。

    定数のconst文では、また同じ文を繰り返すことはできませんしましょう。

    
    CONST FOO = {};

    fooへのプロパティを追加し、あなたが成功することができます
    foo.prop = 123。
    foo.prop // 123

    fooが別のオブジェクトを指して、それがエラーになります
    
    上記のコードでは、オブジェクトを指すこと定数FOO格納アドレスです。
    別のアドレスにfooというポイントではなく、オブジェクト自体が可変である不変だけこのアドレスは、新しい属性を追加することも可能です。

    ここでは別の例です。

    CONST A = [];
    a.push( 'こんにちは'); //は実行 
    a.length = 0;     //を行う 
    A = [ 'デイブを'];     // キャッチされない例外TypeError所与:定数変数キャッチされていないタイプの割当:エラーを一定に割り当てられています。変数。

 

    上記のコードは、一定の配列である、配列自体が書き込み可能であるが、それらに別のアレイの割り当てた場合は、エラーになります。
 
 
 
 
 

おすすめ

転載: www.cnblogs.com/shy0113/p/11862876.html