Junior
Que s'affichera dans la console si vous utilisez this dans console.log?
sobes.tech IA
Réponse de l'IA
Cela dépend du contexte de l'appel à console.log et du mode strict de JavaScript ("use strict").
Dans le contexte global (en dehors des fonctions et modules) :
- En mode non strict (
"use strict"absent ou déclaré dans une fonction) :thisfait référence à l'objet global (windowdans le navigateur,globaldans Node.js). - En mode strict :
thisseraundefined.
À l'intérieur d'une fonction :
- En mode non strict :
thisfait référence à l'objet global si la fonction est appelée comme une fonction normale (myFunction()). Si la fonction est appelée comme méthode d'un objet (myObject.myMethod()),thisfait référence à l'objet (myObject). Si la fonction est utilisée comme constructeur (new MyClass()),thisfait référence à la nouvelle instance de l'objet. - En mode strict :
thisseraundefinedsi la fonction est appelée comme une fonction normale. Dans d'autres cas (méthode d'objet, constructeur), le comportement est le même qu'en mode non strict.
À l'intérieur d'une fonction flèche (=>) :
thisest hérité lexicalement du contexte environnant. Cela signifie que la valeur dethisà l'intérieur d'une fonction flèche sera la même que dans la fonction normale externe ou dans le contexte global où la fonction flèche a été déclarée, indépendamment de la façon dont elle est appelée. Les fonctions flèche ne lient pasthisà leur propre contexte d'appel.
Exemple :
// Contexte global
console.log(this); // Dans le navigateur : Window, dans Node.js : global (mode non strict)
// Dans le navigateur : undefined, dans Node.js : undefined (mode strict)
// Fonction normale
function showThisNonStrict() {
console.log(this);
}
showThisNonStrict(); // Dans le navigateur : Window, dans Node.js : global
function showThisStrict() {
"use strict";
console.log(this);
}
showThisStrict(); // undefined
const myObject = {
methodNonStrict: function() {
console.log(this);
},
methodStrict: function() {
"use strict";
console.log(this);
}
};
myObject.methodNonStrict(); // myObject
myObject.methodStrict(); // myObject
// Fonction flèche
const arrowFunc = () => {
console.log(this);
};
arrowFunc(); // Dans le navigateur : Window, dans Node.js : global (hérite du contexte global)
const myObjectWithArrow = {
arrowMethod: () => {
console.log(this);
}
};
myObjectWithArrow.arrowMethod(); // Dans le navigateur : Window, dans Node.js : global (hérite du contexte de déclaration)