Kein Betrug bitte?
Die Konzepte in diesen Fragen sind diejenigen, die mir im Produktionscode begegnet sind. Ziel dieses Quiz ist es, relevante und wesentliche JavaScript-Kenntnisse zu testen.
Was wird auf der Konsole protokolliert?
const user = { name: "Alice", isBanned: false, pricing: 'premium', isSubscribedTo: function(channel) { return channel === "JavaScript"; }, getName: function() { return this.name; }, getStatus: function() { const status = () => { return `Name: ${this.getName()}, Banned: ${this.isBanned}`; }; return status(); } }; const channel = "JavaScript"; const getName = user.getName; const getStatus = user.getStatus; console.log(user.getStatus()); console.log(getName()); console.log(getStatus());
Antworten:
Was wird auf der Konsole protokolliert?
function createCounter() { let count = 0; return function() { count++; console.log(count); } } const counter1 = createCounter(); const counter2 = createCounter(); counter1(); counter1(); counter2();
Antworten:
Was wird auf der Konsole protokolliert?
console.log('Start'); setTimeout(() => console.log('Timeout 1'), 0); Promise.resolve().then(() => console.log('Promise 1')); setTimeout(() => console.log('Timeout 2'), 0); Promise.resolve().then(() => console.log('Promise 2')); console.log('End')
Antworten:
Was wird auf der Konsole protokolliert?
function Animal(name) { this.name = name; } Dog.prototype.speak = function() { console.log(`${this.name} makes a sound.`); } function Dog(name) { Animal.call(this, name); } Dog.prototype.constructor = Dog; const dog = new Dog('Rex'); dog.speak(); console.log(dog instanceof Dog); console.log(dog instanceof Animal);
Was wird für jeden Anruf protokolliert?
function displayUserInfo({ name = "Guest", role = "User" } = {}) { console.log(`Name: ${name}, Role: ${role}`); } displayUserInfo(); displayUserInfo({}); displayUserInfo({ name: "Alice" }); displayUserInfo(null);
Was wird auf der Konsole protokolliert?
const funcs = []; for (var i = 0; i < 3; i++) { funcs.push(function() { console.log(i); }); } for (let j = 0; j < 3; j++) { funcs.push(function() { console.log(j); }); } funcs.forEach(func => func());
document.body.innerHTML = ` <div id="outer"> Outer <div id="middle"> Middle <button id="inner">Inner</button> </div> </div> `; const outer = document.getElementById('outer'); const middle = document.getElementById('middle'); const inner = document.getElementById('inner'); outer.addEventListener('click', () => console.log('Outer Bubble'), false); outer.addEventListener('click', () => console.log('Outer Capture'), true); middle.addEventListener('click', (e) => { console.log('Middle Bubble'); }, false); middle.addEventListener('click', () => console.log('Middle Capture'), true); inner.addEventListener('click', () => console.log('Inner Bubble'), false); inner.addEventListener('click', (e) => { console.log('Inner Capture'); }, true); inner.click();
Sie können dies selbst überprüfen, indem Sie den Code in die Konsole des Entwicklungstools einfügen.
Die richtige Antwort ist B.
Erklärung: Der user.getStatus()-Aufruf protokolliert „Name: Alice, Banned: false“, weil der Pfeilfunktionsstatus innerhalb seines umschließenden Bereichs korrekt darauf zugreift. GetName() protokolliert jedoch undefiniert, da es seinen Kontext „this“ verliert, wenn es einer eigenständigen Variablen zugewiesen wird, was dazu führt, dass getStatus() auch für „name“ und „isBanned“ undefiniert protokolliert.
Die richtige Antwort ist B.
Erklärung: counter1 und counter2 haben jeweils ihre eigenen separaten Zählvariablen, da jeder Aufruf von createCounter() einen neuen Abschluss erstellt. Daher protokolliert Zähler1 bei seinen ersten beiden Aufrufen 1 und 2 und Zähler2 protokolliert bei seinem ersten Aufruf 1.
Die richtige Antwort ist B.
Erklärung: Das synchrone console.log ruft zuerst log „Start“ und „End“ auf. Versprechen haben in der Ereignisschleife eine höhere Priorität als setTimeout, daher werden als nächstes „Versprechen 1“ und „Versprechen 2“ protokolliert, gefolgt von „Timeout 1“ und „Timeout 2“.
Die richtige Antwort ist A.
Erklärung: Das ist also etwas knifflig. Die Speak-Methode ist auf Dog.prototype korrekt definiert, dog ist eine Instanz von Dog.
Im Dog-Konstruktor ruft diese Zeile den Animal-Konstruktor mit dem aktuellen this-Kontext und dem Namensargument auf. Dadurch wird effektiv die Namenseigenschaft für die neu erstellte Dog-Instanz festgelegt.
Nehmen wir an, der Code würde so aussehen:
// Code before... Dog.prototype = Object.create(Animal.prototype); Dog.prototype.constructor = Dog; // Code after...
Dann wäre die richtige Antwort B).
Randbemerkung: Wenn Sie es selbst überprüfen möchten, müssen Sie es in einen Browser einfügen (und nicht in ein LLM, das die Antwort falsch erhält).
Die korrekte Ausgabe lautet:
Antwort: 3, 3, 3, 0, 1, 2
Erklärung: Die erste Schleife verwendet var, das einen Funktionsumfang hat, sodass alle Funktionen in der ersten Hälfte des Arrays über dasselbe i geschlossen werden, das am Ende der Schleife 3 ist. Die zweite Schleife verwendet let, das einen Blockbereich hat, sodass jede Funktion in der zweiten Hälfte über einem anderen j-Wert (0, 1, 2) geschlossen wird, was zur Ausgabe führt: 3, 3, 3, 0, 1, 2.
Die richtige Antwort ist D.
Erklärung:
Dieses Beispiel zeigt den gesamten Lebenszyklus eines Ereignisses. Sie können die Weitergabe stoppen, indem Sie stopImmediatePropagation oder die Funktion stopPropagation aufrufen.
Das obige ist der detaillierte Inhalt vonSie beherrschen JavaScript, wenn Sie diese Fragen richtig beantworten können. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!