Sobes.tech
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): this a globális objektumra utal (window böngészőben, global` Node.js-ben).
  • Szigorú módban: this undefined lesz.

Függvényen belül:

  • Nem szigorú módban: this a 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()), akkor this az objektumra (myObject) utal. Konstruktorként (new MyClass()) való használat esetén this az új példányra utal.
  • Szigorú módban: this undefined lesz, 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:

  • this lexikálisan öröklődik a környező kontextusból. Ez azt jelenti, hogy az arrow függvényen belüli this ugyanaz 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át this-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)