JavaScript に関する質問
Front-end Job Interview Questions - JS Questions の回答集です。提案や訂正のプルリクエストは大歓迎です!
- イベントデリゲーションについて説明してください。
- JavaScript の
thisはどう機能するものなのか説明してください。 - プロトタイプ継承はどのように機能するか説明してください。
- AMD と CommonJS は何が違いますか?
- なぜ次のコードは IIFE として機能しないのでしょうか?:
function foo(){ }();IIFE として機能させるには何を変える必要がありますか? - 変数が
null、undefined、未定義だったときの違いはなんでしょう?どのようにして、これらの状態を調べますか? - クロージャとはなんですか?また、なぜこれを使うのでしょうか?どのように使うのでしょうか?
.forEachと.map()の違いを説明できますか?これらをどのように使い分けますか?- 無名関数の典型的な使い方を教えてください。
- どのようなことを意識してコードを組み立てていますか? (モジュールパターン, classical inheritance?)
- host objects と native objects は何が違いますか?
- 次のコードの違いはなんですか?:
function Person(){}後、var person = Person()とvar person = new Person() .callと.applyの違いはなんですか?Function.prototype.bindについて説明してください。document.write()はいつ使いますか?- feature detection, feature inference, and using the UA string の違いはなんですか?
- Ajax をできるだけ詳しく説明してください。
- Ajax を利用する利点と欠点はなんですか?
- JSONP がどのように機能するか(またそれが Ajax とはどこが違うのか)を説明してください。
- JavaScript templating を使ったことがありますか? もしあれば、どのライブラリを使ったことがありますか?
- "巻き上げ"について説明してください。
- event bubbling について教えてください。
- "attribute" と "property" の違いを説明してください。
- ビルトインオブジェクトを拡張することはなぜ良くないのでしょうか?
- document
loadevent と documentDOMContentLoadedevent の違いは? ==と===の違いはなんですか?- JavaScript の同一オリジンポリシーについて説明してください。
- 以下のコードを動くようにしてください:
- それが Ternary expression と呼ばれるのはなぜですか? "Ternary" はどういう意味で使われているのでしょうか?
"use strict";とはなんですか?これを使う利点と欠点を教えてください。- "fizz" を
3の倍数で、"buzz" を5の倍数で、"fizzbuzz" を3と5の倍数で出力する100まで反復する for ループを作成してください。 - Web サイトのグローバルスコープをそのままの状態を保ち、決して触らないことが、一般的に良いとされているのはなぜですか?
- なぜあなたは
loadイベントのようなものを使うのですか?このイベントには欠点がありますか?あなたは何か選択肢を知っていますか、なぜそれらを使うのですか? - シングルページアプリが何であるか、そして SEO に優しいアプリを作る方法を説明してください。
- プロミスおよび/またはそのポリフィルの経験はどの程度ですか?
- コールバックの代わりにプロミスを使用することの長所と短所は何ですか?
- JavaScript にコンパイルしてくれる言語で JavaScript を書く利点と欠点をいくつか教えてください。
- JavaScript のコードをデバッグする際にはどんなツールや技術をを利用しますか?
- オブジェクトのプロパティや、配列の要素をイテレートする際にどの構文を使いますか?
- mutable と immutable オブジェクトの違いを説明してください
- synchronous と asynchronous functions の違いを説明してください。
- event loop とはなんですか?call stack や task queue との違いはなんですか?
function foo() {}とvar foo = function() {}をした場合のfooの使い方の違いを説明してください。letとvarとconstで宣言した変数の違いはなんですか?- ES6 のクラス定義と、ES5 のコンストラクタ関数との違いには何がありますか?
- アロー構文の使い方を例示してください。この構文と他の方法による定義とは何が違いますか?
- コンストラクタにおいて、メソッドをアロー構文で定義する方法の利点はなんですか?
- 高階関数とはなんですか?
- オブジェクトと配列について、「分割代入」の例を教えてください。
- ES6 のテンプレート文字列は文字列を作り出す上で様々な柔軟性をもたらしますが、例を示すことはできますか?
- カリー化の例を説明してください。またカリー化がもたらす利点はどこにあるのでしょうか?
- spread syntax を利用する利点はなんですか?また、rest syntax とは何が違っていますか?
- ファイル間でコードを共有するにはどうすれば良いですか?
- 静的クラスメンバーはどんな場面で使いますか?
- 他の方の回答集
イベントデリゲーションについて説明してください。
イベントデリゲーションは、イベントリスナーを子要素に追加するのではなく、親要素に追加する手法です。リスナーは子孫要素でイベントがトリガーされるたびに発生します。これはイベントが DOM を登ってくるためです。この手法の利点は次のとおりです。
- 子孫ごとにイベントハンドラーをアタッチするのではなく親要素に 1 つのハンドラーしか必要ないため、メモリの使用量が減少します。
- 削除された要素からハンドラをはずしたり、新しい要素にイベントをつける必要がなくなります。
参考
- https://davidwalsh.name/event-delegate
- https://stackoverflow.com/questions/1687296/what-is-dom-event-delegation
JavaScript の this はどう機能するものなのか説明してください。
this の簡単な説明はありません。それは JavaScript の最も混乱しやすい概念の 1 つです。手のひら波の説明は、this の値が関数の呼び出し方法に依存するということです。私はこのオンラインで多くの説明を読んでおり、Arnav Aggrawalの説明が最も明白であることがわかりました。次のルールが適用されます。
- 関数を呼び出すときに
newキーワードが使用されている場合、関数内のthisは全く新しいオブジェクトです。 apply、call、bindを使って関数を呼び出す/作成する場合、関数内のthisは引数として渡されるオブジェクトです。- メソッドが
obj.method()のように呼び出された場合、thisはその関数がプロパティであるオブジェクトです。 - 関数が空の関数呼び出しとして呼び出された場合、つまり、上記の条件のいずれかがなくても呼び出された場合、
thisはグローバルオブジェクトです。ブラウザでは、windowオブジェクトです。strict モード('use strict')の場合、thisはグローバルオブジェクトではなくundefinedになります。 - 上記のルールの複数が適用される場合、より高いルールが勝ち、
this値を設定します。 - 関数が ES2015 矢印関数の場合、上記のすべてのルールを無視し、作成時にその周囲のスコープの
this値を受け取ります。
詳細な説明は、彼の article on Medium を参照してください。
参考
- https://codeburst.io/the-simple-rules-to-this-in-javascript-35d97f31bde3
- https://stackoverflow.com/a/3127440/1751946