Nachfolger in meinem vorherigen Artikel "5 Typische JavaScript -Interviewübungen" untersucht dieses Stück zusätzliche Fragen der gemeinsamen Interviews und konzentriert sich auf wichtige JavaScript -Konzepte. Lassen Sie uns eintauchen!
Key Takeaways:
typeof
Bediener -Quirks: typeof []
Gibt "Objekt", nicht "Array" zurück. Verwenden Sie instanceof
, um nach Array -Typen zuverlässig zu überprüfen. setTimeout()
, selbst mit einer Verzögerung von Null setzt sich der Rückruf für die spätere Ausführung an. isPrime()
Funktionsoptimierung: Validieren Sie immer Eingänge (negative Zahlen, 0, 1 sind nicht primet; 2 ist die einzige gleiche Prime). Testen der Spaltbarkeit nur bis zur Quadratwurzel des Eingangs verbessert die Effizienz erheblich. Frage 1: Schließungen - Das klassische Problem
Betrachten Sie diesen Code:
var nodes = document.getElementsByTagName('button'); for (var i = 0; i < nodes.length; i++) { nodes[i].addEventListener('click', function() { console.log('You clicked element #' + i); }); }
Was ist die Ausgabe, wenn Sie auf die erste und vierte Schaltflächen klicken? Warum?
Antwort:
Dies unterstreicht das Schließungsverhalten. Der Code druckt "Sie klickte auf Element #[Anzahl der Schaltflächen]" zweimal geklickt. Die Variable i
wird über alle Ereignishandler geteilt. Bis zum Zeitpunkt einer Schaltfläche klickt, ist die Schleife abgeschlossen und i
hält den Endwert (die Anzahl der Schaltflächen).
Frage 2: Behebung des Verschlussproblems
Ändern Sie den vorherigen Code, um den Index der Schaltfläche korrekt zu drucken (0 für die erste, 1 für die zweite usw.).
Antwort:
Zwei Lösungen:
Lösung 1 (iife):
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)); }
Lösung 2 (Wrapper -Funktion):
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)); }
Frage 3: Datentyp Gotchas
Was ist die Ausgabe davon?
console.log(typeof null); console.log(typeof {}); console.log(typeof []); console.log(typeof undefined);
Antwort:
<code>object object object undefined</code>
Beachten Sie das überraschende "Objekt" für Arrays. Verwenden Sie myArray instanceof Array
für eine genaue Überprüfung des Array -Typs.
Frage 4: Ereignisschleife Bestellung
Was ist die Ausgabe und warum?
function printing() { console.log(1); setTimeout(function() { console.log(2); }, 1000); setTimeout(function() { console.log(3); }, 0); console.log(4); } printing();
Antwort:
<code>1 4 3 2</code>
Die Ereignisschleife erklärt dies. setTimeout
Rückrufe werden in der Warteschlange gestellt, auch mit einer Verzögerung von 0 ms. Sie führen nach Abschluss des Haupt -Threads aus.
Frage 5: Der isPrime()
Algorithmus
Schreiben Sie eine Funktion isPrime(number)
, die true
zurückgibt, wenn die Zahl Primzahl ist, false
sonst
Antwort:
var nodes = document.getElementsByTagName('button'); for (var i = 0; i < nodes.length; i++) { nodes[i].addEventListener('click', function() { console.log('You clicked element #' + i); }); }
Diese optimierte Version übernimmt die Eingabevalidierung und überprüft nur ungerade Zahlen bis zum Quadratwurzel.
Schlussfolgerung:
Diese Übungen behandeln grundlegende JavaScript -Konzepte, die häufig in Interviews getestet wurden. Üben Sie diese, um Ihr Verständnis zu stärken und Ihre Interviewleistung zu verbessern.
Das obige ist der detaillierte Inhalt von5 Weitere JavaScript -Interviewübungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!