JSコアコンセプト

5602 ワード

元と参照


元と参照


1.変数には1つのデータのみが含まれます.
2.なぜ資料構造を単独で実施するのか.
変数に入れるデータのサイズが限られているからです.
3.元のタイプのデータの格納方法
stackというロッカーがあり、宣言と名付けられています.変数に値を割り当てると、値はロッカーに格納されます.また、この貯蔵庫の値は名前でロッカーの値を取り戻します
元のタイプをコピーすると値がコピーされるので、コピー値を変更しても既存の値には影響しません.
4.参考資料の保存方式
リファレンスタイプ(referencetypdata)は、ロッカーに名前を付け、アドレスを割り当てます.その後、heapという名前の空間に値を格納し、スタックに格納されたアドレスを介してheapを参照することができる.この貯蔵空間は寸法を動的に変えることができる.
参照タイプのデータをコピーするとアドレスがコピーされるため、コピー値を変更すると既存の値にも影響します.
3)紛らわしいもの
console.log([1,2,3] === [1,2,3]); //flase
console.log({ foo: 'bar' } === { foo: 'bar' });//false
上記の場合、比較演算子は、比較アドレスが同じか否かを比較する

変数/エスケープ/TDZ


変数の種類と特徴


1.var
  • 関数スキャン()
  • 、定義/宣言および割当てを個別に作成できます.
    1)宣言と初期化
    2)分配`
  • を再宣言することができます.
  • の値
  • を再割り当て可能
    2.let
  • Bluetooth
  • 、定義/宣言および割当てを個別に作成できます.
    1)宣言
    2)初期化
    3)分配
  • 再宣言は不可能
  • の値
  • を再割り当て可能
    3.const
  • Bluetooth
  • と定義の生成
    1)同時に宣言、初期化、分配//宣言分配
  • を行う必要がある
  • 再割当再宣言は実行できません
  • がんばって


    1.ホイスティンがスコップ内で起きる
    2.scope内部の任意の位置にかかわらず、変数宣言は最上位に宣言されたように表現されます.
    3.変数をハイライトするときは宣言のみハイライトし、割当てはハイライトしません
    したがって、varでは、割当てと同時に初期化を行うため未割当ての状態で使用すると、エラーは発生しない

    TDZ


    変数が反発宣言として割り当てられ、値が割り当てられていない場合、TDZの影響を受けます.

    スキャン


    スコフって何?


    変数に近い範囲が存在します.この範囲をscopurと呼びます.

    スキャン規則


    1.内視鏡から外視鏡に近づくことができるが、反対にはならない.

    2.スペクトルを重ねることができる
  • 最外部のスキャン:全局スキャン/非全局スキャン:領域スキャン
  • グローバル範囲内の優先変数:グローバル変数/ゾーン範囲内で宣言された変数:ゾーン変数
  • 3.ゾーン変数>グローバル変数(優先順位)
  • は同じ変数名を持つため、外部変数は内部変数によって隠され(シャドウ)、この現象を変影(Variable Shadowing)と呼ぶ.
  • 地域変数宣言後に割り当てられた場合
    関数に新しい変数が宣言されているため、同じ名前の新しい変数が作成されますが、関数にのみ存在します.

    //コード
    バーク
    //コード
  • 地域変数は宣言されず、割り当てられています.
    関数に宣言されず、nameに値が指定されているため、グローバル変数が直接インポートされ、値が割り当てられます.最終的にグローバル変数nameが「朴ハッカー」に変更されました

    //コード
    バーク
    //朴ハッカー
  • ひょうほん


    1.括弧で囲む範囲(block scope:block scope)
  • ifゲート
  • for文
  • 矢印関数
  • 2.関数範囲(functionscope:関数範囲)
  • 関数宣言
  • 関数式
  • 3.各変数の特徴と従う範囲

    4.どのような変数を使用すればよいですか.
    varは旧時代の宣言方式である.ブロックスキャンを無視し、関数スキャンに従うだけで、特性が分からないとエラーコードに陥りやすい.
    逆にletはBlock Scopeと関数Scopeに従い,再発言を防止する.
    ブロック単位でスキャンを分割する場合、より予測可能なコードを記述できるため、letキーワードを使用することをお勧めします.
    しかし、以前書いたコードを見ることが多いので、varの特性も必ず知っておく必要があります.
    constの使用により、値の変更を最小限に抑えることができます(値を再割り当てすると、TypeErrorよりも安全なプログラムが作成されます).
    5.変数線内で注意すべき点
    1)varとして宣言されたグローバル変数とグローバル関数はwindowオブジェクトに属する
  • はどこでもアクセス可能な変数と関数ですが、他の関数や論理的な予期せぬ変更が発生する可能性があります.
    (side effect)
  • 2)varと宣言されたグローバル変数はwindow機能を上書きし、組み込み機能を無効にする可能性がある
    3)宣言なしで変数を割り当てない
  • が宣言されていない場合に変数を割り当てると、この変数はvarが宣言されたグローバル変数
  • と見なされる.

    エンクロージャ


    Closer関数とは?


    1.モジュールの定義
    Closerは、関数と宣言された関数の語彙環境(LexicalEnvironment)の組合せです.
  • 語彙環境:変数と関数宣言形式を含む空間?まず
    2.エンクロージャのコア
  • オシロスコープを使用して、変数の近接範囲を閉じます.
  • では、引き続き使用するためにスキャナに特定のデータを保持できます.
  • Closer関数の特徴


    1.Closer関数は「関数によって返される関数」
    2.Closer関数は外部関数変数に近づくことができる内部関数である

    Closer関数の利点


    1.データを保持する関数
  • モジュールは、外部関数の実行が完了しても、外部関数の変数をメモリに格納します.
    (Lexical環境に格納)
  • では、スキャナに特定のデータを保持して使用を続行できます.
    2.モジュールモード
  • は、複数のモジュール関数を含むオブジェクト
  • を記憶する.
  • 内部スキャンプログラムでアクセスできないため、「値」//情報へのアクセスを直接変更することはできません(カプセル化)

    あるcounter 1、counter 2にmakeCounter()を入れると、ディレクトリ環境が異なります.
    したがって、counter 1の値とcounter 2の値は、相互に影響を与えることなく、互いに保持することができる.