Pas de triche s'il vous plaît ?
Les concepts de ces questions sont ceux que j'ai rencontrés dans le code de production. Le but de ce quiz est de tester les connaissances JavaScript pertinentes et essentielles.
Qu'est-ce qui sera enregistré sur la console ?
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());
Réponses :
Qu'est-ce qui sera enregistré sur la console ?
function createCounter() { let count = 0; return function() { count++; console.log(count); } } const counter1 = createCounter(); const counter2 = createCounter(); counter1(); counter1(); counter2();
Réponses :
Qu'est-ce qui sera enregistré sur la console ?
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')
Réponses :
Qu'est-ce qui sera enregistré sur la console ?
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);
Qu'est-ce qui sera enregistré pour chaque appel ?
function displayUserInfo({ name = "Guest", role = "User" } = {}) { console.log(`Name: ${name}, Role: ${role}`); } displayUserInfo(); displayUserInfo({}); displayUserInfo({ name: "Alice" }); displayUserInfo(null);
Qu'est-ce qui sera enregistré sur la console ?
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();
Vous pouvez le vérifier vous-même en collant le code dans la console de l'outil de développement.
La bonne réponse est B.
Explication : L'appel user.getStatus() enregistre "Nom : Alice, Banned : false" car l'état de la fonction fléchée y accède correctement dans sa portée englobante. Cependant, getName() enregistre un état non défini car il perd son contexte lorsqu'il est attribué à une variable autonome, ce qui conduit getStatus() à enregistrer également un état non défini pour name et isBanned.
La bonne réponse est B.
Explication : counter1 et counter2 ont chacun leurs propres variables de comptage distinctes car chaque appel à createCounter() crée une nouvelle fermeture. Ainsi, counter1 enregistre 1 et 2 lors de ses deux premiers appels, et counter2 enregistre 1 lors de son premier appel.
La bonne réponse est B.
Explication : Le fichier console.log synchrone appelle d'abord le journal "Début" et "Fin". Les promesses ont une priorité plus élevée que setTimeout dans la boucle d'événements, donc "Promise 1" et "Promise 2" sont ensuite enregistrées, suivies de "Timeout 1" et "Timeout 2".
La bonne réponse est A.
Explication : Celui-ci est donc un peu délicat. La méthode speak est correctement définie sur Dog.prototype, dog est une instance de Dog.
Dans le constructeur Dog, cette ligne appelle le constructeur Animal avec le contexte this actuel et l'argument name. Cela définit effectivement la propriété name sur l'instance Dog nouvellement créée.
Disons maintenant que le code serait comme ceci :
// Code before... Dog.prototype = Object.create(Animal.prototype); Dog.prototype.constructor = Dog; // Code after...
Alors la bonne réponse serait B).
Remarque : si vous souhaitez le vérifier vous-même, vous devez le coller dans un navigateur (et non dans un LLM qui obtient une réponse incorrecte).
Le résultat correct est :
Réponse : 3, 3, 3, 0, 1, 2
Explication : la première boucle utilise var, qui a une portée de fonction, donc toutes les fonctions de la première moitié du tableau se ferment sur le même i, qui est 3 à la fin de la boucle. La deuxième boucle utilise let, qui a une portée de bloc, donc chaque fonction de la seconde moitié se ferme sur une valeur j différente (0, 1, 2), ce qui donne la sortie : 3, 3, 3, 0, 1, 2.
La bonne réponse est D.
Explication :
Cet exemple montre le cycle de vie complet d'un événement. Vous pouvez arrêter la propagation en appelant la fonction stopImmediatePropagation ou stopPropagation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!