Junior
Mit jelenik meg a konzolon, ha a this-t használja a console.log-ban?
sobes.tech MI
Válasz az MI-től
Ez attól függ, hogy milyen kontextusban hívják a console.log-ot és a JavaScript szigorú módját ("use strict").
Globális kontextusban (függvényeken és modulokon kívül):
- Nem szigorú módban (
"use strict"hiányzik vagy egy függvényben van deklarálva):thisa globális objektumra utal (window böngészőben,global` Node.js-ben). - Szigorú módban:
thisundefinedlesz.
Függvényen belül:
- Nem szigorú módban:
thisa globális objektumra utal, ha a függvényt normál módon hívják (myFunction()). Ha a függvényt egy objektum metódusaként hívják (myObject.myMethod()), akkorthisaz objektumra (myObject) utal. Konstruktorként (new MyClass()) való használat eseténthisaz új példányra utal. - Szigorú módban:
thisundefinedlesz, ha a függvényt normál módon hívják. Más esetekben (metódus, konstruktor) ugyanaz a viselkedés, mint nem szigorú módban.
Arrow függvényen (=>) belül:
thislexikálisan öröklődik a környező kontextusból. Ez azt jelenti, hogy az arrow függvényen belülithisugyanaz lesz, mint a külső normál függvényben vagy a globális kontextusban, ahol deklarálták, függetlenül attól, hogyan hívják. Az arrow függvények nem kötődnek sajátthis-hez.
Példa:
// Globális kontextus
console.log(this); // Böngészőben: Window, Node.js-ben: global (nem szigorú mód)
// Böngészőben: undefined, Node.js-ben: undefined (szigorú mód)
// Normál függvény
function showThisNonStrict() {
console.log(this);
}
showThisNonStrict(); // Böngészőben: Window, Node.js-ben: 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
// Arrow függvény
const arrowFunc = () => {
console.log(this);
};
arrowFunc(); // Böngésző: Window, Node.js: global (öröklődik a globális kontextusból)
const myObjectWithArrow = {
arrowMethod: () => {
console.log(this);
}
};
myObjectWithArrow.arrowMethod(); // Böngésző: Window, Node.js: global (öröklődik a deklarációs kontextusból)