以前の記事「5つの典型的なJavaScriptインタビューエクササイズ」のフォローアップ、この作品は、重要なJavaScriptの概念に焦点を当てた追加の一般的なインタビューの質問を探ります。 飛び込みましょう!
キーテイクアウト:
typeof
「アレイ」ではなく「オブジェクト」を返します。 typeof []
を使用して、アレイタイプを確実に確認します。instanceof
setTimeout()
isPrime()
このコードを検討してください:
最初と4番目のボタンをクリックすると、出力は何ですか?なぜ?
var nodes = document.getElementsByTagName('button'); for (var i = 0; i < nodes.length; i++) { nodes[i].addEventListener('click', function() { console.log('You clicked element #' + i); }); }
これは閉鎖動作を強調します。コードには「要素#[ボタンの数]」を2回クリックします。 変数は、すべてのイベントハンドラーで共有されます。ボタンがクリックされるまでに、ループが終了し、が最終値(ボタンの数)を保持します。
質問2:閉鎖の問題の修正i
i
回答:
2つのソリューション:
ソリューション1(iife):
ソリューション2(ラッパー関数):
var nodes = document.getElementsByTagName('button'); for (var i = 0; i < nodes.length; i++) { nodes[i].addEventListener('click', (function(i) { return function() { console.log('You clicked element #' + i); }; })(i)); }
質問3:データ型gotchas
これの出力は何ですか?function handlerWrapper(i) { return function() { console.log('You clicked element #' + i); }; } var nodes = document.getElementsByTagName('button'); for (var i = 0; i < nodes.length; i++) { nodes[i].addEventListener('click', handlerWrapper(i)); }
回答:
console.log(typeof null); console.log(typeof {}); console.log(typeof []); console.log(typeof undefined);
を使用してください。
質問4:イベントループ順序<code>object object object undefined</code>
myArray instanceof Array
出力とその理由は何ですか?
回答:
function printing() { console.log(1); setTimeout(function() { console.log(2); }, 1000); setTimeout(function() { console.log(3); }, 0); console.log(4); } printing();
コールバックがキューに登録されます。 メインスレッドが完了した後に実行されます
質問5:
<code>1 4 3 2</code>
数値がプライムの場合はsetTimeout
を返す関数を書きます。そうでなければ。
回答: この最適化されたバージョンは、入力検証を処理し、正方形まで奇数をチェックします。
結論:
以上がさらに5つのJavaScriptインタビューエクササイズの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。isPrime()
var nodes = document.getElementsByTagName('button');
for (var i = 0; i < nodes.length; i++) {
nodes[i].addEventListener('click', function() {
console.log('You clicked element #' + i);
});
}