ブロックレベルのスコープnodejs

今、私たちは3つのキーワードVAR、聞かせて、CONST、特性および使用方法を理解しましょう。

ました

JavaScriptは、我々は通常、スコープは関数スコープ、変数varステートメントであると言うに関係なく、コード内で宣言された場合の、この動作は、可変リフト(巻き上げ)と呼ばれ、ほとんどの現在のスコープのトップに昇格されます

変数が関数内で宣言されている場合、変数にグローバルに宣言しながら、それは、それがグローバルスコープのトップに昇格します、関数の先頭に昇格されますされています。

 

機能テスト(){ 
    にconsole.log( '1'、A)// 未定義の
    場合){
       VARの A = 1 
    } 
    はconsole.log( '3'、A)// 未定義
} 

テスト()

 

実際の実装は、関数内の上記のコードの変数は、if文の条件が偽の場合でも、声明のトップに上げられます、同じことが可変リフトに影響を与えません。

試験関数(){ 
    VARのA 
    //ステートメントが割り当てられていないれていない
    ( '1'、A)にconsole.logを//未定義の
    (偽の)IF { 
      。A = 1 
    } 
    //ない代入文
    はconsole.log( '3' 、A)//未定義
}

  シーン機能ネストされた関数では、変数は、ごく最近の関数の先頭に上昇したが、外部関数にアップグレードされません。

// Bは関数Aのトップに上げますが、機能テストは改善されません。
    試験関数(){ 
        関数A(){ 
          IF(偽の){ 
            VARのB = 2 
          } 
        } 
        はconsole.log( 'B'、B)
    } 

    テスト()// Bが定義されていません

  文がない場合、それは、この点は別の領域でなければならない、何の代入文や声明後も同じではないではありません、エラー私たちはバグを見つけましょう

//がない場合の宣言
    aが定義されていません。

  てみましょう

constが宣言され、ブロックレベルの範囲をさせ、および使用特性変数がリフトされていないせ、VARに類似しているが、現在のブロックにロックされることができます。

非常に簡単な例:

テスト機能(){ 
        IF(真の){ 
          一般的に一時的なデッドゾーンとして知られているTDZのはconsole.log(A)は、//、現象を記述するために使用される変数を強化しない
          のlet Aを=。1 
        } 
    } 
    テスト()// Aが定義されていない

    機能のテスト(){ 
        IF(真の){ 
          LETのA = 1 
        } 
        にconsole.log(A)
    }     
    テスト()// Aが定義されていません

  最初の文を、次に訪問:使用する唯一の正しい方法。

機能テスト(){ 
        IF(TRUE){ 
          せ= 1 
          にconsole.log(A)
        } 
    } 
    テスト()// 1

  

 

おすすめ

転載: www.cnblogs.com/danruoyanyun/p/11390157.html