JS#4変数(2)


TIL(Today I Learned) 🧑🏻‍💻


4.変数(2)


4.4  変数宣言の実行点と変数エスケープ

console.log(score); // undefined
var score; // 변수 선언문
ReferenceErrorが表示されるように見えますが、エラーは発生せず、Undefindが出力されます.

  • 変数宣言(宣言フェーズと初期化フェーズ)は、まずソースコードの前のフェーズで実行され、1行1行のシーケンス実行時(runtime)ではありません.

  • JavaScriptエンジンは、実行時(runtime)の前にソースコードで変数宣言を含むすべての宣言(変数宣言、関数宣言など)を検索して実行します.

  • 変数宣言がコードの先頭に引き上げられるように,動作のJavaScript固有の特徴を変数エスケープ(variablehilling)と呼ぶ.

  • 変数宣言に加えてvar、let、const、function、function*、classキーワード宣言を使用するすべての識別子(変数、関数、クラスなど)は反発します.
  • 4.5  割当値

    var score; // 변수 선언
    score = 80; // 값의 할당
    var score = 80; // 변수 선언과 값의 할당
    
    変数宣言と値割当てを1つの文に簡略化しても、JavaScriptエンジンは変数宣言と値割当てを2つの文に分けて実行します.
    console.log(score); // undefined
    
    var score; // 변수 선언
    score = 80; // 값의 할당
    
    console.log(score); // 80
    変数宣言は、まずソースコード順で実行される時点実行時より前に実行され、値の割り当てはソースコード順で実行される時点実行時に実行されます.

    以前の値undefinedに格納されていたメモリ領域を消去し、割り当て値80をメモリ領域に再格納するのではなく、新しいメモリ領域を保持し、割り当て値80をメモリ領域に格納することに注意してください.

    4.6  値の再割り当て

    var score = 80; // 변수 선언과 값의 할당
    score = 90;     // 값의 재할당
    varキーワードとして宣言された変数は、宣言と同時にundefinedに初期化されるため、厳密には、初めて変数に値を割り当てることも実際には再割り当てされる.
  • の値を再割り当てできないため、変数に格納されている値を変更できない場合は、変数ではなく定数(constant)と呼ばれます.

  • 変数を再割り当てすると、新しいメモリ領域が得られ、そのメモリ領域に数値が格納されることに注意してください.
  • 識別子に関連付けられていない不要な値は、ゴミ収集器(ゴミ収集器)によってメモリから自動的に解放されます.ただし、メモリからいつ解除されるかは予測できません.
  • 4.7  識別子命名規則

  • 識別子は、次の命名規則に従う必要があります.
  • 識別子は、特殊文字以外の文字、数字、アンダーコード()、およびドル記号($)を含むことができる.
  • セグメントで、識別子は特殊文字以外の文字、数字、ベースコード()、ドル記号($)で始まる必要があります.数字で始まることはできません.
  • 予約語は識別子として使用できません.

  • 1つのドアは複数の変数を宣言できますが、可読性が悪くなり、推奨されません.

  • ミーティングの名前付け
  • // 카멜 케이스(camelCase)
    var firstName;
    
    // 스네이크 케이스(snake_case)
    var first_name;
    
    // 파스칼 케이스(PascalCase)
    var FirstName;
    
  • JavaScriptでは、変数または関数の名前は通常camel caseを使用し、コンストラクション関数およびクラスの名前はpascal caseを使用します.
  • 新しい用語のクリーンアップ


  • ≪ゴミ収集器(ゴミ収集器)|Garbage Collector(Garbage Collector)|oem_src≫:アプリケーションの割当て(割当て)のメモリ領域を定期的にチェックすることで、識別子を参照しないメモリを解放(解放)します.JavaScriptは、ゴミ収集器でメモリの漏洩を防止します.

  • メモリリーク:コンピュータプログラムは、不要なメモリを消費し続けます.割り当てられたメモリを使用して蓄積が返されない場合は、メモリが浪費されます.

  • 非管理言語(Unmanaged language):メモリ制御機能を提供する言語(ex:c,c+...).パフォーマンスは確保できますが、逆に致命的なエラーが発生する可能性があります.

  • 管理言語(Managed language):メモリを直接制御できない言語(ex:javascript...);一定の生産性は保証できるが、性能面では一定の損失を受けなければならない.
  • 参考文献


    *現代JavaScript Deep Dive(JavaScriptの基本概念と動作原理)/李雄模