モダンJavaScript Deep Dive-4章

4237 ワード

整理する


1.変数


すべてのアプリケーションは、複雑に見える場合でも、最終的にデータを受信し、新しいデータをエクスポートします.
これらのデータを処理するには変数が必要です.
const sum = 10 + 20;

// 위의 식을 자바스크립트가 만났을 때 해석하기위해 필요한 것
// 1. 10, 20이라는 리터럴에 대한 의미
// 2. + 연산자에 대한 의미

// 연산은 CPU
// 데이터저장은 memory

// 위의 식을 자바스크립트가 만났을 때 해석하는 방법
// 1. 10과 20인 숫자리터럴을 메모리의 임의의 공간에 2진수 형태로 저장한다. ( 이때 저장된 메모리주소를 기억해둔다 )
// 2. CPU에서 메모리주소를 읽어서 연산결과를 만들어내고 연산결과를 임의의 메모리공간에 2진수 형태로 저장한다.
// 3. 이때 30이 저장된 메모리공간을 반환해줘서 sum이라는 변수에 이진수형태로 30이 저장된 메모리공간의 주소가 저장된다.
この場合、sumは変数と呼ばれ、変数は1つの値を格納するために保持されるメモリ空間そのものを意味する.
簡単に言えば、位置値のシンボル名です.JavaScriptは、CまたはC++のポインタのようにメモリ領域に直接アクセスできません.
  • 할당:変数に値を格納する動作(借用または保存とも呼ばれる)
  • 참조:変数に格納された値を読み出す動作
  • 식별자:どの値を識別できるかを示す名前(変数名、関数名、クラス名など)
  • 2.変数の宣言


    変数宣言とは、格納された値のメモリ領域を取得し、変数名とメモリ領域をマッピングする動作です.
    変数宣言に従って取得されたメモリ領域は、変数が解放される前に、誰も使用できないように保護されます.
    変数宣言には、varletconstなどが使用されます.

    2.1変数宣言フェーズ

  • 변수선언단계:変数名を登録しJavaScriptエンジンで存在を通知
  • 변수초기화단계:変数undefinedに初期値を入れます
  • 2.2値の割当て


    変数に値を割り当てるには

    3.コード解析


    JavaScriptは、コードを解釈する際に코드평가단계런타임である.
  • 코드평가단계:コードが有効であることを検証すると、エスケープ
  • が発生します.
  • 런타임:1行のコードを実行するには
  • 変数に新しい値を追加する場合は、同じメモリ領域で値を消去し、新しい値を追加する必要はありません.
    新しいメモリ領域に値を入れ、メモリのアドレスを変更します.
    すなわち、以下の例では、第1のvおよび最後のvは、異なるメモリ領域を指す.
    console.log(v);	// undefined
    
    var v;	// 변수 선언 ( 코드평가단계에서 실행... 호이스팅 )
    v = 10;	// 값의 할당 ( 런타임에서 실행 )
    
    console.log(v);	// 10

    4.変数とゴミ収集器の再配分


    変数再割り当てとは、変数に値を変更する動作です.
    var v = 10;	// 변수 선언과 변수 초기화
    v = 20;		// 변수 재할당
    前例の出来事
    1.メモリ容量をundefinedに初期化し、vに格納します.
    2.新しいメモリ容量を10に初期化し、対応するメモリアドレスをvに格納します.
    3.新しいメモリ容量を20に初期化し、対応するメモリアドレスをvに格納します.
    これにより、undefinedと10のメモリ容量が浪費されます.
    この問題を解決するために、JavaScriptのゴミ収集器では、参照されていないメモリ領域の割り当てが解除されます.

    5.変数命名規則

  • 文字、数字、_$無効文字
  • 最初の識別子が数字であることを禁止
  • 予約禁止言語
  • camelCasesnake_casePascalCaseはいずれかのルールのみを適用する(多くはPascalCase)
  • 追加

  • 変数名は、実行コンテキストに格納されます.
  • の最後の部分

  • const v = 10;の場合、vには10は含まれません.vは、変数と呼ばれるバイナリ形式で10を含むメモリのアドレス値を有します.

  • ゴミ収集器で参照されていないメモリ領域は、アクセス可能な識別子がない値を示します.