Junior
O que será exibido no console se usar this no console.log?
sobes.tech IA
Resposta da IA
Depende do contexto da chamada a console.log e do modo estrito do JavaScript ("use strict").
No contexto global (fora de funções e módulos):
- Em modo não estrito (
"use strict"ausente ou declarado numa função):thisreferirá ao objeto global (windowno navegador,globalno Node.js). - Em modo estrito:
thisseráundefined.
Dentro de uma função:
- Em modo não estrito:
thisreferirá ao objeto global se a função for chamada como uma função normal (myFunction()). Se a função for chamada como método de um objeto (myObject.myMethod()),thisreferirá ao objeto (myObject). Se a função for usada como construtor (new MyClass()),thisreferirá à nova instância do objeto. - Em modo estrito:
thisseráundefinedse a função for chamada como uma função normal. Em outros casos (método de objeto, construtor), o comportamento é o mesmo que em modo não estrito.
Dentro de uma função seta (=>):
thisé herdado lexicalmente do contexto circundante. Isso significa que o valor dethisdentro de uma função seta será igual ao da função normal externa ou do contexto global onde foi declarada, independentemente de como seja chamada. Funções seta não vinculamthisao seu próprio contexto de chamada.
Exemplo:
// Contexto global
console.log(this); // No navegador: Window, no Node.js: global (modo não estrito)
// No navegador: undefined, no Node.js: undefined (modo estrito)
// Função normal
function showThisNonStrict() {
console.log(this);
}
showThisNonStrict(); // No navegador: Window, no 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
// Função seta
const arrowFunc = () => {
console.log(this);
};
arrowFunc(); // No navegador: Window, no Node.js: global (herda do contexto global)
const myObjectWithArrow = {
arrowMethod: () => {
console.log(this);
}
};
myObjectWithArrow.arrowMethod(); // No navegador: Window, no Node.js: global (herda do contexto de declaração)