Sobes.tech
Junior

Mida kuvatakse konsoolis, kui kasutate this console.log?

sobes.tech AI

Vastus AI-lt

Sõltuvalt console.log-i väljakutse kontekstist ja JavaScripti range režiimist ("use strict").

Globaalses kontekstis (välja funktsioonide ja moodulite):

  • Nestriktse režiimis ("use strict" puudub või on funktsioonis deklareeritud): this viitab globaalsele objektile (window brauseris, global Node.js-is).
  • Range režiimis: this on undefined.

Funktsiooni sees:

  • Nestriktse režiimis: this viitab globaalsele objektile, kui funktsioon kutsutakse kui tavaline funktsioon (myFunction()). Kui funktsioon kutsutakse objekti meetodina (myObject.myMethod()), viitab this objekti (myObject). Kui funktsioon kasutatakse konstruktorina (new MyClass()), viitab this uuele objekti eksemplarile.
  • Range režiimis: this on undefined, kui funktsioon kutsutakse kui tavaline funktsioon. Muudes olukordades (objekti meetod, konstruktor) on käitumine sama mis nestriktse režiimis.

Noolefunktsiooni (=>) sees:

  • this pärandub leksikaalselt ümbritsevast kontekstist. See tähendab, et this väärtus noolefunktsiooni sees on sama mis välise tavalise funktsiooni või globaalse konteksti puhul, kus noolefunktsioon on deklareeritud, sõltumata sellest, kuidas seda kutsutakse. Noolefunktsioonid ei seosta this-i oma kutsumise kontekstiga.

Näide:

// Globaalkontekst
console.log(this); // Brauseris: Window, Node.js: global (nestriktse režiim)
                    // Brauseris: undefined, Node.js: undefined (range režiim)

// Tavaline funktsioon
function showThisNonStrict() {
  console.log(this);
}

showThisNonStrict(); // Brauseris: Window, 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

// Noolefunktsioon
const arrowFunc = () => {
  console.log(this);
};

arrowFunc(); // Brauseris: Window, Node.js: global (pärineb ümbritsevast kontekstist)

const myObjectWithArrow = {
  arrowMethod: () => {
    console.log(this);
  }
};

myObjectWithArrow.arrowMethod(); // Brauseris: Window, Node.js: global (pärineb deklareerimise kontekstist)