必見の JavaScript 面接質問 10 選のまとめ (おすすめ)

必見の JavaScript 面接質問 10 選のまとめ (おすすめ)

1.これは

1. 誰が誰に電話をかけますか?

例:

  関数foo(){
        console.log("これ",これ);
      }
      新しい foo(); 

2. ウィンドウをグローバルにポイントする

例:

 関数foo(){
        console.log("これ",これ);
 }
 関数 foo(); 

3. コンストラクタのthisはコンストラクタインスタンスを指します

4.call/apply/bindはthisポインタの変更を強制する

5. 矢印関数のthisは常に親コンテキストを指す

2. イベント モデル: イベント委任、プロキシ?最初にイベントをバブルさせてからキャプチャする方法

イベント委任: イベント プロキシとも呼ばれます。イベント委任では、イベント バブリングを使用して、すべての子要素イベントを親要素にバインドします。子要素がイベントのバブルを妨げる場合、委任は実現できません。

3つのパラメータ:イベント名、イベントメソッド、キャプチャするかバブルするか

最初にバブル、後でキャプチャ

2 つの addEventListeners を要素にバインドし、一方の 3 番目のパラメータを false (つまり、バブリング) に設定し、もう一方の 3 番目のパラメータを true (つまり、キャプチャ) に設定します。コードの順序を調整し、false に設定されたリスニング イベントを true に設定されたリスニング イベントの前に配置します。

3. オブジェクトとオブジェクト指向

オブジェクトは、異なるデータ型の複数の属性を格納できる複合データ型です。

オブジェクト指向はプログラミング概念(すべてがオブジェクトである)であり、プロセス指向(クラス:クラス継承(サブクラスは親クラスのメソッドとプロパティを継承する)、カプセル化(コアは低結合と高凝集)、ポリモーフィズム(オーバーロードと書き換え))に対応します。js はオブジェクト指向言語です。

* js 自体はオブジェクト指向プログラミングに基づいて構築されています (例: JS には、Array、Object、Function、String などの多くの組み込みクラスがあります。Promise は ES6 で追加された新しい組み込みクラスであり、新しい Promise に基づいてインスタンスを作成して異種プログラミングを管理できます)。

※一般的に、私たちが普段使っているVUE/REACT/JQUERYもオブジェクト指向に基づいて構築されています。それらはすべてクラスであり、通常の開発では操作のためにインスタンスが作成されます。

4. for···in と for···of の違い

1. オブジェクトのプロパティをループする場合は for...in を使用し、配列を走査する場合は for...of を使用することをお勧めします。

2. for...in はキーをループし、for...of は値をループします。

3. for...of は通常のオブジェクトをループすることができないため、Object.keys() を使用する必要がある

5. 配列内の重複を見つける

要素の最初と最後の出現のインデックスが同じかどうかを確認し、要素が新しい配列に存在しないかどうかを判断します。両方の条件が満たされている場合は、新しい配列に追加します。

ES6セット

ES6のsetを使うのが重複を削除する最も簡単な方法です

var arr = [1,1,'true','true',true,true,15,15,false,false,未定義,
未定義、null、null、NaN、NaN、'NaN'、0、0、'a'、'a'、{}、{}];
 
関数 arr_unique1(arr){
[...新しいSet(arr)]を返します。
//または //Array.from(new Set(arr)); を返します。
}
arr_unique1(arr); // (13)[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}]

マップデータ構造を使用して重複を削除する

関数 arr_unique2(arr) {
  map = new Map();
  let array = new Array(); // 配列は結果を返すために使用されます for (let i = 0; i < arr.length; i++) {
    if(map .has(arr[i])) { // キー値がある場合 map .set(arr[i], true);
    } それ以外 {
      map .set(arr[i], false); // キー値が存在しない場合は array .push(arr[i]);
    }
  }
  配列を返します。
}

 console.log(arr_unique2(arr)); //(13) [1, "a", "true", true, 15, false, 1, {…}, null, NaN, NaN, "NaN", 0, "a", {…}, 未定義]

再帰的重複排除の使用

関数 arr_unique3(arr) {
     var 配列 = arr;
     var len = 配列の長さ;
     array.sort(function(a,b){ // ソート後に重複を削除する方が簡単です return a - b;
    })
    
 関数 loop(インデックス){
        if(インデックス >= 1){
            if(配列[インデックス] === 配列[インデックス-1]){
                配列.splice(インデックス,1);
            }
            loop(index - 1); // 再帰ループ、その後配列の重複排除}
    }
    ループ(長さ-1);
    配列を返します。
}
 
console.log(arr_unique3(arr)); //(14) [1, "a", "true", true, 15, false, 1, {…}, null, NaN, NaN, "NaN", 0, "a", {…}, 未定義]

forEach + インデックス

フィルター+インデックス

forEach + 含む

6. 配列の平坦化

配列の平坦化とは、多次元配列を 1 次元配列に変換することです。

1. 配列の各項目を走査します。

2. 項目が配列かどうかを判断します。

3. 項目が配列でない場合は、新しい配列に直接配置します。

4. 配列の場合は 1 に戻り、反復処理を続けます。

5. 配列の走査が完了したら、新しい配列を返します。

7. iframe の利点と欠点は何ですか?

アドバンテージ:

①iframeは埋め込まれたウェブページをそのまま表示できます。

②複数のウェブページがiframeを参照している場合、iframeの内容を変更するだけで、呼び出される各ページのコンテンツを変更できるので、便利で迅速です。

③Webページのスタイル、ヘッダー、バージョンが同じ場合は、1ページとして記述し、iframeでネストすることでコードの再利用性を高めることができます。

④アイコンや広告などのサードパーティコンテンツの読み込みが遅い問題は、iframe によって解決できます。

欠点:

① 管理が難しいページが多数生成されます。

②iframe 構造はわかりにくい場合があります。フレームの数が多いと、上下左右のスクロールバーが表示され、訪問者の注意をそらし、ユーザーエクスペリエンスが低下します。

③コードが複雑で、一部の検索エンジンではインデックスできません。これは非常に重大です。現在の検索エンジンのクローラーは iframe 内のコンテンツをうまく処理できないため、iframe を使用すると検索エンジンの最適化に悪影響を及ぼします。

④機器の互換性が悪い。

⑤iframe フレーム ページはサーバーの http リクエストを増加させるため、大規模な Web サイトにはお勧めできません。

8. 関数カリー化

複数の引数を受け入れる関数を、単一の引数 (元の関数の最初の引数) を受け入れ、残りの引数を受け入れて結果を返す新しい関数に変換する手法。

呼び出す関数にパラメータの一部だけを渡し、残りのパラメータを処理する新しい関数を返すことです(クロージャ)

9. ガベージコレクションの仕組み

ブラウザの Javascript には自動ガベージ コレクション メカニズム (GC: Garbage Collecation) があり、コード実行中に使用されるメモリの管理は実行環境が担当します。原則としては、ガベージ コレクターは、使用されなくなった変数を定期的に (定期的に) 見つけて、そのメモリを解放します。ただし、このプロセスは非常にコストがかかり、GC が他の操作に応答しなくなるため、リアルタイムではありません。そのため、ガベージ コレクターは、一定の時間間隔で定期的にこのプロセスを実行します。

10.ウィンドウのonloadイベントとdomcontentloaded

ウィンドウの読み込み:

onload イベントは、リソースとその依存リソースの読み込みが完了したときに発生します。

ドキュメント.onDOMContentLoaded:

DOMContentLoaded イベントは、スタイルシート、画像、サブフレームの読み込みが完了するのを待たずに、最初の HTML ドキュメントが完全に読み込まれて解析されたときに発生します。

違い:

①onloadイベントはDOMイベント、onDOMContentLoadedはHTML5イベントです。

②onload イベントはスタイルシート、画像、サブフレームによってブロックされますが、onDOMContentLoaded はブロックされません。

③読み込まれたスクリプトコンテンツに即時の DOM 操作が含まれていない場合は、onload イベントよりも先に実行される onDOMContentLoaded イベントを使用する方が適切です。

要約する

これで、JavaScript 面接で必ず読むべき 10 の質問に関するこの記事は終了です。JavaScript 面接でもっと関連性の高い質問については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 知っておくべき JavaScript 面接の質問 25 選
  • 比較的完全な JavaScript 面接の質問セット (部分的な回答)
  • 応募者の80%が不合格になるJS面接の質問
  • js フロントエンド面接の質問と回答(パート 1)
  • BAT および他の大手インターネット企業 2014 フロントエンド筆記試験面接の質問 - JavaScript
  • 間違えてしまう可能性のあるJSクロージャ面接の質問
  • NetEase JS 面接の質問と Javascript の語彙範囲の説明
  • Javascript フロントエンドの典型的な面接の質問と回答
  • 5つの典型的なJavaScript面接の質問
  • JS 面接の質問 43 選(コレクション)

<<:  MongoDBのパフォーマンスを向上させる方法

>>:  Linux で Spring Boot プロジェクトを開始および停止するためのスクリプトの例

推薦する

jQueryはドロップダウンメニューのスライド効果を実現します

Web ページを作成するときに、クールでスムーズなドロップダウン メニューが必要になることがあります...

Mysql クラシック高レベル/コマンドライン操作 (クイック) (推奨)

サーバーとデータベースの構築方法を学ぶ必要があるため、最近は SQL 言語を独学で学び始めました。デ...

知らないかもしれないmysqldumpパラメータ

前回の記事で、mysqldump バックアップ ファイルに記録されるタイムスタンプ データは UTC...

MySqlのインストールとログインの詳細な説明

LinuxにMySQLがすでにインストールされているかどうかを確認する sudo service m...

CSS3 のエラスティック レイアウトでの em の使用の概要: 1em は何ピクセルですか?

私は長い間 CSS を使用してきましたが、Web 要素の関連属性を設定するために常に「px」を使用し...

js QRコードスキャンログインの原理についての簡単な説明

目次QRコードログインの真髄QRコードを理解するシステム認証メカニズムQRコードをスキャンしてログイ...

MySQLテーブルにタイムスタンプを追加するいくつかの方法

シナリオ:テーブル内のデータは、同期ツールを使用して他のデータベースと同期する必要があり、増分同期に...

Windows 10 で MySQL の解凍バージョンをインストールする方法の詳細なグラフィック チュートリアル

MySQL のインストールは、インストール バージョンと解凍バージョンに分かれています。インストール...

MySQLの暗黙的な変換について話す

作業の過程で、暗黙的な変換が発生するケースが数多くあります。暗黙的な変換は、クエリの速度低下を引き起...

MySQL のスローログオンラインの問題と最適化ソリューション

MySQL スロー ログは、MySQL DBA やその他の開発および運用担当者が細心の注意を払う必要...

収集する価値のある Linux ドキュメント編集コマンド 27 個

Linux col コマンドLinux の col コマンドは制御文字をフィルタリングするために使用...

WeChatアプレット開発の章:落とし穴の記録

最近、会社初のミニプログラムの開発に参加しました。開発経験は基本的にWebViewをベースとしたハイ...

DockerコンテナのライフサイクルアーキテクチャとVMとの違いについて詳しく説明します。

コンテナのライフサイクルコンテナランタイムのライフサイクルコンテナは、分離特性を持つプロセスのセット...

MySQL 5.5.27 winx64 のインストールと設定方法のグラフィックチュートリアル

1. インストールパッケージMYSQLサービスダウンロードアドレス:MySQL公式サイトからダウンロ...