JavaScriptの面接問題の整理

5791 ワード


  • 識別子、変数、定数
    ✔変数(variable)で変更可能な数量(データ)
    ✔識別子あるデータを識別するための名称変数名
    ✔定数変更不可データ
    ✔変数と定数区分他のデータを割り当てられたスペースに再割り当てできるか

  • 未定義とnull
    ✔undefined:変数が付与されておらず、オブジェクトに存在しない属性にアクセスしようとした場合、void関数が実行した結果
    (let、constは初期化されているため、未定義の割当ての前にアクセスできません)
    ✔null:空の値を表す
    null == undefined // true
    null === undefined // false

  • 実行コンテキスト
    ✔実行するコードを含む環境情報の対象

  • がんばって
    💥 識別子を最上位レベルにドラッグして変数情報を収集します.
  • function hoisting() {
      var a = 1;	// 변수 생성
      console.log(a);	// 1
      var a;	// 이미 선언된 a가 있으므로 무시
      console.log(a);	// 1
      var a = 3;	// 값만 할당
      console.log(a);	// 3
    }
    💥 変数は宣言のみをドラッグ&ドロップし、関数全体をドラッグ&ドロップします.
  • 関数宣言文と関数式
    ✔関数宣言:関数定義部分のみ存在し、個別の配分はない
    function fx() {...}
    ✔関数式:定義した関数を個別の変数に割り当て、他の関数名は不要
    var fx = function() {...}

  • スキャン
    💥 識別子の有効範囲
    💥 スキャンチェーン:識別子の有効範囲を内側から外側に順に検索します.
    💥 複数のブランチで同じ識別子が宣言されている場合は、ブランチチェーンで最初に検出された識別子にアクセスします.

  • 関数とメソッド(独立性の違い)
    ✔関数:独立した機能を実行する
    ✔方法:自分の呼び出し先オブジェクトに対して操作を行う
    ✔関数名の前にオブジェクトが指定されている場合は、メソッドまたは関数です.

  • this
    💥 実行コンテキストの作成時に一緒に決定
    💥 メソッド時にボディを呼び出す情報
    💥 関数の場合、この値は指定されません(グローバルオブジェクトを指します).
    💥 矢印関数はこのアイテムをバインドしません
    💥 コールバック関数では、制御権を持つ関数(メソッド)が、コールバック関数でこの関数を何とするかを決定します.

  • このメソッドを明示的にバインド
    ✔call:このパラメータを最初のパラメータでバインドし、後のパラメータをパラメータとして使用
    ✔apply:このパラメータを最初のパラメータでバインドし、パラメータとして使用するパラメータを配列に送信
    ✔bind:callと似ていますが、すぐに呼び出さず、このパラメータとパラメータのみに基づいて新しい関数を返します.
  • 	Function.prototype.call(thisArg[arg1, [arg2[, ...]])
    	Function.prototype.apply(thisArg[, argsArray])
    	Function.prototype.bind(thisArg[arg1, [arg2[, ...]])
  • エンクロージャ(クローズ)
    💥 ある関数で宣言された変数を参照する内部関数で発生する現象.
    💥 ある関数を参照して宣言された変数の内部関数を外部に渡すと、外部関数の実行コンテキストが終了しても変数は消えません.
    💥 呼び出すことができる関数
  • は、関数を宣言するときに作成された有効範囲が消えた後でも呼び出すことができる.