TIL]Deep Dive-変数


🌼4.1変数は何ですか。どうして必要なの?


人間の計算も記憶も脳の中にあるが、コンピュータには演算や記憶を実行する部品がある.コンピュータはCPUを用いて演算し,メモリを用いてデータを格納する.メモリは、データを格納できるメモリユニットの集合である.メモリユニットのサイズは1バイトで、コンピュータは1バイト単位でデータを格納または取得します.メモリに格納されているすべての値はバイナリ形式で格納されます.
プログラミング言語は、メモリに記憶したい値を格納し、格納された値を取得および再利用するための変数と呼ばれるメカニズムを提供します.변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다. 간단히 말하자면 값의 위치를 가리키는 상징적인 이름이다.
var result = 10 + 20;
  • 변수 이름(identifier):メモリ領域に格納されている値の一意の名前を識別できます.(result)
  • 변수 값:変数に格納されている値.(10+20、すなわち30)
  • 할당(assignment):変数に値を格納すること.
  • 참조(reference):変数に格納されている値を検索すること.
  • 🌼4.2識別子


    変数名は識別子とも呼ばれます.識別子とは、ある値を区別できる固有の名前です.名前で人を識別するように、値も識別子で識別できます.식별자는 값이 아니라 메모리 주소를 기억하고 있다.変数、関数、クラスなどの名前の識別子は、ネーミングルールに従う必要があり、JavaScriptエンジン識別子の存在を通知すると宣言されます.

    🌼4.3宣言変数


    変数を使用するには、宣言する必要があります.変数を宣言するときにvar、let、constキーを使用します.宣言されていない識別子にアクセスすると、参照エラーが発生します.
  • 키워드:キーワードはjavascriptコードのjavascriptエンジンが実行する動作を解釈し実行するコマンドです.キーワードに遭遇すると、JavaScriptエンジンは、自分が実行する必要がある所定の動作を実行します.
  • var score;
    
    //var 키워드는 뒤에 오는 변수 이름으로 새로운 변수를 선언할 것을 지시하는 키워드다.
    //위 변수 선언문은 다음과 같이 변수 이름을 등록하고 값을 저장할 메모리 공간을 확보한다.
    変数を宣言した後、変数に値が割り当てられていない場合、保持されたメモリ領域はJavaScriptエンジンによってundefinedという値が暗黙的に割り当てられ、初期化されます.初期化を行わない場合、保存されたメモリ領域は、以前に他のアプリケーションで使用された値を保持する可能性があります.これらの値をゴミ値と呼びます.
  • 선언 단계:変数名を登録し、JavaScriptエンジンに変数の存在を通知する.
  • 초기화 단계:メモリ値のメモリ領域を確実に保存し、初期化のためにデフォルト割当が定義されていない.
  • 🌼4.4変数宣言の実行点と変数エスケープ

    자바스크립트 코드는 인터프리터에 의해 한 줄씩 순차적으로 실행従ってコンソール.log(score);まず実行したのは、次の行のコードを順に実行します.console.log(score);実行時に変数scoreが宣言されていないため、参照エラーが予想されますが、定義されていません.
    その原因は변수 선언이 소스코드가 한 줄씩 실행되는 시점, 즉 런타임이 아니라 그 이전 단계에서 먼저 실행JavaScriptエンジンは、ソースコードの実行に備えたソースコード評価の過程で、変数宣言、関数宣言など、すべての宣言をソースコードから見つけて実行します.
    このように변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유 특징을 변수 호이스팅이라 한다.
    console.log(score); //undefined
    
    var score;

    🌼4.5値の割当て

    var score; //변수 선언
    score = 80; //변수 할당
    var score = 80; //변수 선언과 값의 할당
    変数宣言と値割当てを2つの文で表されるコードに分割することは、変数宣言と値割当てを1つの文で表されるコードと全く同じ動作です.
    でも주의할 점은 변수 선언과 값의 할당의 실행 시점이 다르다変数宣言は、まずソースコード順で実行される時点実行時より前に実行され、値の割り当てはソースコード順で実行される時点実行時に実行されます.
    変数に値を割り当てる場合は、以前の値undefinedに格納されていたメモリ領域を消去し、割り当て値80をメモリ領域に再格納するのではなく、新しいメモリ領域を保持し、割り当て値80をメモリ領域に格納することに注意してください.
    //변수 호이스팅으로 인해 변수 선언이 코드문 실행 전에 수행되어 1은 undefined가 출력된다.
    console.log(score); //1. ??
    
    score = 80; //값의 할당
    var score; //변수 선언
    
    //console.log 실행전에 변수 선언과 할당이 정상적으로 수행되어 80이 출력된다.
    console.log(score); //2. ??

    🌼4.6値の再割り当て


    varキーワードとして宣言された変数に値を再割り当てできます.再割り当ては、現在の変数に格納されている値を破棄し、新しい値を保存します.変数に値を最初に割り当てるのもundefinedに値を割り当てることで、再割り当てに相当します.값을 재할당할 수 없어서 변수에 저장된 값을 변경할 수 없다면 변수가 아니라 상수(constant)라 한다.定数が1回しか割り当てられない変数であれば.これらの再割り当てにより、使用されなくなった値はゴミ収集器によって自動的にメモリから解放されます.ただし、メモリからいつ解除されるかは予測できません.JavaScriptは、ごみ収集器を内蔵した管理言語で、ごみ収集器によってメモリの漏洩を防止します.

    🌼4.7識別子命名規則


    識別子は、次の命名規則に従う必要があります.

  • 識別子には、特殊文字以外の文字、数字、ベースコード、およびドル記号を含めることができる.

  • ただし、識別子は特殊文字以外の文字、ベースコード、ドル記号で開始する必要があります.数字で始まることはできません.

  • 予約語は識別子として使用できません.予約語とは、プログラミング言語で使用されるまたは使用される予定の語を指す.
  • 命名規則は、1つまたは複数の英語の単語からなる識別子を作成する際に、単語を可読にするために規定された命名規則である.命名の約束を守って良い名前をつけることができます.以下の4つのタイプのネーミングセッションがよく使用されます.
    //카멜 케이스: 변수나 함수 이름에 사용
    var firstName;
    
    //스네이크 케이스
    var first_name;
    
    //파스칼 케이스: 생성자 함수나 클래스 이름에 사용
    var FirstName;
    
    //헝가리언 케이스(typeHungarianCase)
    var strFirstName;
    var $elem = document.getElementById('myId');
    出典:モダンJavaScript Deep Dive-李雄模