[JS]04章変数


この文章は現代JavaScript DeepDiveの内容を個人的に整理した文章です.
4.1変数は何ですか.どうして必要なの?
コンピュータはCPUを用いて演算し,メモリを用いてデータを格納する.
コンピュータのメモリはメモリユニットの集合であり、各メモリユニットは8ビット(1 byte)であり、コンピュータは1 byte単位でデータを格納または取得する.

もしそうなら、JavaScriptで10+20を実行したらどうなりますか?
コンピュータは、10および20の値を任意のメモリアドレスに割り当て、CPUはこれらの値を読み出し、+演算子を介して結果値30を任意のメモリアドレスに保存する.

ただし、現在の場合、結果値30を使用するためには、メモリ30のメモリアドレス値を検索して直接アクセスして取得するしかない.
ただし、メモリへの直接アクセスは、次の理由で正しくありません.
  • JavaScriptは、致命的なエラーが発生する可能性があるため、開発者のメモリ制御を使用しません.
  • メモリアドレスは状況によって異なり、コードを実行するたびに異なります.
  • したがって,プログラミング言語は変数と呼ばれるメカニズムを提供する.
    変数とは、値を格納するために保持されるメモリ領域自体またはメモリ領域を識別するために命名された名前です.(ここで得られるメモリ領域自体とは、元の値が格納されている場合であり、メモリ領域を識別するために命名された名前とは、参照値が格納されている場合である.)
    簡単に言えば、変数とは、値の位置(メモリアドレス)の象徴的な名前です.
  • 変数は、コンパイラまたは割り込みプログラムによって記憶値のメモリ空間のアドレスに変換されて実行される.
  • では、メモリアドレスで値を参照するのではなく、開発者が変数でアクセスします.
  • 変数の使用
    var result = 10 + 20;
  • 変数名:メモリ領域に格納されている値を識別する一意の名前
  • 変数値:変数に格納された値
  • 割当(置換、保存):変数に値を格納動作
  • .
  • 参照:変数に格納された値を読み出す動作変数名resultに変数値30を指定し、変数名resultによって参照を要求し、変数名とマッピングされたメモリアドレスによってメモリ空間にアクセスし、割り当てられた値を返す.
  • 4.2識別子
    識別子とは、ある値を区別できる固有の名前です.
  • 変数名は識別子とも呼ばれます.
  • 識別子は、メモリ領域に格納された値を識別することができる必要がある.
  • 識別子は、値ではなくメモリアドレスを覚えています.
  • 、すなわち、識別子はメモリアドレスに付けられた名前といえる.
  • メモリに存在する値を識別できる名前は、変数名だけでなく識別子と呼ばれます.
    識別子は、ネーミング・ルールに従い、宣言に従って存在を通知する必要があります.
    4.3宣言変数
    変数宣言とは、変数を生成することです.
    すなわち、
  • メモリ領域を取得し、取得したメモリ領域のアドレスを接続する.
  • は、メモリ領域が解放されるまで他の人に使用されないことを保証し、安全に使用することができる.
  • 変数を宣言するときは、varletconstのキーワードを使用します.
  • キーワード:JavaScriptエンジンが実行する操作を規定する命令.Javascriptエンジンがキーワードに遭遇すると、自分が実行する必要がある約束の動作が実行されます.
    e.g.)varキーワードに遭遇した場合,後の変数で新しい変数を名声で示す.
  • 変数宣言しよう
    var score; // 변수 선언

    変数に示すだけで、割り当てられていません.デフォルトでは、空のメモリ領域ではなくundefinedという値が割り当てられます.
    JAvascriptエンジンでは、次の2つのステップで変数宣言が実行されます.
  • 宣言フェーズ:変数名を登録して変数の存在を通知します.
  • 初期化フェーズ:メモリ値にメモリ領域を保持し、デフォルトではundefinedが初期化されます.
  • varキーワードを使用した変数宣言は、宣言フェーズと初期化フェーズを同時に行います.
    一般に、초기화は、変数が宣言された後に初めて値を付与することを意味する.初期化を行わないと、以前他のアプリケーションで使用されていたゴミ値が残る可能性があります.
    すべての識別子を使用するには、宣言する必要があります.宣言されていない識別子に近づくとReferenceErrorが発生します.
    💡 変数の名前はどこに登録されますか?
    13章scopeと23章実行コンテキスト、メモリhip、callstackについて説明します.
    4.4変数宣言の実行点と変数エスケープ
    console.log(score); // undefined
    
    var score; // 변수 선언문
    上記の例は、変数を宣言する前に参照されたが、ReferenceErrorは発生しなかった.
    これは、変数宣言がinterpreterによって行ごとに実行される実行時ではなく、前のステップで先に実行されるためです.
    JAvascriptエンジンは、コードを実行する前にソースコードを評価します.この評価の過程で,まずコードからすべての宣言を探し出して実行する.つまり、変数宣言がコード内のどの位置にあるかにかかわらず、JavaScriptエンジンが最初に実行されます.
    このように宣言がコードの前に置かれるように,動作のJavaScript固有の特徴を変数エスケープと呼ぶ.
    4.5値の割当て
    変数には、代入演算子=を使用して代入します.代入演算子右側の値を左に割り当てます.
    var score; // 선언
    score = 80; // 할당
    
    var score = 80; // 하나의 문으로 단축 표현할 수 있다.
    変数宣言と値割り当ての実行時間が異なることに注意してください.
    変数宣言は、実行時の前に最初に実行されます.値の割り当ては実行時に実行されます.
    以下のコードは①から④の順に行います.
    console.log(score); // ② score 변수 참조: undefined 
    
    var score = 80; // ① 변수 score 할당, ③ 변수 score에 값 할당
    
    console.log(score); // ④ score 변수 참조: 80
    4.6値の再割り当て
    再割り当てとは、値が割り当てられた変数に新しい値を割り当てることです.格納された値を別の値に変更できるため、変数と呼ばれます.
    値を再割り当てできない場合は、変数ではなく定数と呼ばれます.
    var score = 80;
    score = 90; // 재할당
    変数値を再割り当てした後、score変数を参照すると、80から90に変更されます.
    このとき、80は記憶されたメモリ領域を消去し、再割り当て値90をメモリ領域に再記憶するのではなく、新しいメモリ領域を解放し、値をメモリ領域に記憶する.

    再割り当て後のシェーディング部分は、識別子に関連付けられていません.これらの不要な値は、ゴミ収集器によって自動的にメモリから解放されます.
    4.7識別子命名規則
    識別子は、次の命名規則に従う必要があります.
  • 特務順字に加えて、文字、数字、ベースコード()、ドル記号($)を含むこともできる.
  • の数字で始めることはできません.
  • 予約語は識別子として使用できません.
  • 次の識別子は命名規則に違反し、変数名として使用できません.
    var first-name; // 사용 불가한 문자(-)가 들어감.
    var 1st; // 숫자로 시작함.
    var this; // 예약어 사용
    javascriptは大文字と小文字を区別するので、次の変数は個々の変数です.
    var fistname;
    var firstName;
    var FirstName;
    命名規則は、識別子の作成時に単語をうまく区切るために定められた命名規則である.
    // 카멜 케이스(camelCase)
    var fisrtName;
    
    // 스네이크 케이스(snake_case)
    var first_name;
    
    // 파스칼 케이스(PascalCase)
    var FirstName;
    
    // 헝가리언 케이스(typeHungarianCase)
    var strFirstName;
    var $elem = document.getElementById('myId');
    var observable$ = fromEvent(document, 'click');
    JavaScriptでは、通常変数または関数でcamel caseを使用し、コンストラクション関数およびクラス名でpascal caseを使用します.