4.変数&5.式と文


04章変数


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


メモリアドレスを介して値に直接アクセスすることは、致命的なエラーが発生する可能性が高い非常に危険なことです.
OSが使用している値を誤って変更すると、システムが停止する致命的なエラーが発生する可能性があります.
したがって、JavaScriptでは、開発者がメモリを直接制御することはできません.
またjavascriptで開発者がメモリを直接制御できるようにすると、問題も発生します.
メモリ値のメモリアドレスは、コードが実行されるたびにランダムに決定され、コードが実行されるまでメモリ値のメモリアドレスが分からない.
プログラミング言語は、メモリに記憶したい値を格納し、格納された値を取得および再利用するための変数と呼ばれるメカニズムを提供します.
変数とは、値を格納するために保持されるメモリ領域自体またはメモリ領域を識別するために命名された名前です.
簡単に言えば、変数は値を格納して参照するメカニズムであり、値の位置を指す象徴的な名前である.
したがって,開発者はメモリアドレスを直接介して値を格納し参照する必要はなく,変数を介して値に安全にアクセスできる.
メモリ領域に格納されている値を識別できる一意の名前を変数名(または変数名)と呼びます.
また、変数に格納される値を変数値と呼ぶ.
値を変数に格納することを割当て(代入、保存)と呼び、参照して変数に格納された値を取得します.

4.2識別子


変数名は識別子とも呼ばれます.
識別子とは、ある値を区別できる固有の名前です.
値はメモリ領域に格納されます.したがって、識別子は、メモリ領域に格納されている値を識別できる必要があります.
このため、識別子は、値を格納するメモリアドレスを記憶する必要があります.
識別子という語は変数名に限定されない.
変数、関数、クラスなどの名前は識別子です.
識別子としての変数名はメモリに存在する変数値を識別し、関数名はメモリに存在する関数を識別することができる.

4.3宣言変数


変数宣言とは、変数を生成することです.
より詳細には、メモリ値が保存されているメモリ領域を特定し、変数名と保存されているメモリ領域のアドレスを接続して、メモリ値を準備します.
変数を使用するには、宣言する必要があります.変数を宣言するときは、varletconstのキーワードを使用します.
ES 6にletconstのキーワードが導入される前に、varのキーワードはjavascriptで変数を宣言できる唯一のキーワードである.
varキーワードには多くの欠点があります.varキーワードの多くの欠点の中で最も代表的なのは、ブロックレベルのスキャンをサポートせず、関数レベルのスキャンをサポートすることである.そのため,意外にもグローバル変数を宣言し,深刻な副作用を生じる.
JAvascriptエンジンでは、次の2つのステップで変数宣言が実行されます.
  • 宣言フェーズ:JavaScriptエンジン変数の存在を通知する変数名を登録します.
  • 初期化フェーズ:メモリ値にメモリ領域を保持し、デフォルトではundefinedが初期化されます.
  • すべての識別子(変数名を含む)は、実行コンテキストに登録されます.実行コンテキストは、JavaScriptエンジンがソースコードの評価と実行に必要な環境を提供し、コードの実行結果を実際に管理する分野です.

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


    次の例を示します.
    console.log(score); // undefined
    
    var score; // 변수 선언문
    前は変数宣言ではなく、変数を参照するコードです.
    したがって、ReferenceErrorが発生する可能性があります.ただし、undefinedが出力されます.
    これは、変数宣言が、ソースコードの各行の順序で実行されるのではなく、ソースコードの前のステップで最初に実行されるためです.
    このように,変数宣言がコードの先頭に引き上げられるように,動作のJavaScript固有の特徴を変数エスケープと呼ぶ.
    実際には、変数宣言に加えて、varletconstfunctionfunction*classのキーワード宣言を使用するすべての識別子が符号化される.
    すべての声明は、まず実行時の前の短いカニで実行されるからです.

    4.5値の割当て


    変数宣言は、まずソースコード順で実行される時点実行時より前に実行され、値の割り当てはソースコード順で実行される時点実行時に実行されます.
    console.log(score); // undefined
    
    var score;
    score = 80;
    
    console.log(score); // 80
    変数宣言と値割当てを文に短縮できるため、前の例は次の例と同じです.
    console.log(score); // undefined
    
    var score = 80;
    
    console.log(score); // 80

    4.6値の再割り当て

    varキーワードとして宣言された変数は、値を再割り当てできます.
    再割り当ては、現在の変数に格納されている値を破棄し、新しい値を保存します.varキーワードとして宣言された変数は、宣言と同時にundefinedに初期化されるため、厳密には、変数に初めて値を付与することも実際には再割り当てされる.
    値を再割り当てできず、変数に格納されている値を変更できない場合は、変数ではなく定数と呼ばれます.
    constキーワード
    ES 6を使用して導入されたconstキーワードで宣言された変数は、再割り当てが禁止されます.すなわちconstキーワード宣言は一度しか割り当てられない変数である.したがってconstキーワードを用いて定数を表すことができる.

    4.7識別子命名規則


    識別子は、次の命名規則に従う必要があります.
  • 識別子は、特殊文字以外の文字、数字、アンダーコード、ドル記号を含むことができる.
  • セグメントで、識別子は特殊文字以外の文字、ベースコード、ドル記号で開始する必要があります.数字で始まることはできません.
  • 予約語は識別子として使用できません.
  • 予約語await , break , case , catch , class , const , continue , debugger , default , delete , do , else,enum , export , extends , false , finally , for , function , if , implements , import , in , instanceof , interface , let , new , null , package , private , protected , public , return , super , static , switch , this , throw , true , try , typeof , var , void , while , with , yield一貫性を保つ場合は、任意の命名規則を使用できますが、JavaScriptでは、変数または関数の名前にcamel caseを使用し、コンストラクション関数およびクラスの名前にpasscal caseを使用します.ECMAScript規格で定義されているオブジェクトと関数には、カメルボックスとパスカルボックスも使用されます.

    05章式と文


    5.1値


    値は、式の計算によって生成された結果です.
    値は、さまざまな方法で生成できます.最も基本的な方法は文字を使うことです.

    5.2リットル


    文字とは、人が理解できる文字や約定記号で値を生成する記号法である
    次のように、テキストを使用して異なるタイプの値を生成します.
    ステレオの例は、高整数literal 100浮動小数点literal 10.5バイナリliteral 0b010000010 bよりも高く、8進literal 0o101 ES 6から始まる.0 oで始まる16進数文字0x41 ES 6が導入される.0 xで始まる文字列テキスト'Hello'"World"不規則テキストtruefalse nullテキストnull未定義テキストundefined対象テキスト{ name: 'Lee', address: 'Sejong' }整列テキスト[ 1, 2, 3 ]関数テキストfunction() {}正規表現テキスト/[A-Z]+/g

    5.3式


    式は値で測定できる文です.つまり、式を計算するときに新しい値が作成されるか、既存の値が参照されます.
    前に紹介した文字は価値で測られています.したがって、文字も式です.
    それ以外に、参照値、算術演算、または関数呼び出し等値で評価できる文は式です.

    5.4ドア


    ゲートはプログラムを構成する基本単位と最小実行単位である.
    ドアは複数のコインで構成されています.
    タグには複数の文法的意味があり、文法的にさらに区分できないコードの基本要素を指す.
    文は宣言、付与文、条件文、繰返し文などに分けられます.
    // 변수 선언문
    var x;
    
    // 할당문
    x = 5;
    
    // 함수 선언문
    function foo () {}
    
    // 조건문
    if (x > 1) { console.log(x); }
    
    // 반복문
    for (var i = 0; i < 2; i++) { console.log(x); }

    5.5セミコロンとセミコロンの自動挿入


    文末のセミコロンはオプションです.
    これは,自動挿入セミコロン機能(ASI)がJavaScriptエンジンでソースコードを解析する際にデフォルトでセミコロンを予測文の終了箇所に自動的に貼り付けるためである.

    5.6非式文と式文


    式文と非式文を区別する最も簡単な方法は、変数に割り当てることです.
    var foo = var x; // SyntaxError: Unexpected token var