Sobes.tech
Junior

Ko tiks parādīt konsolē, ja izmantosit this console.log?

sobes.tech AI

Atbilde no AI

Atkarībā no console.log izsaukšanas konteksta un JavaScript stingrā režīma ("use strict").

Globālā kontekstā (ārpus funkcijām un moduļiem):

  • Nestriktīvā režīmā ("use strict" nav vai ir deklarēts funkcijā): this atsauksies uz globālo objektu (window pārlūkprogrammā, global Node.js).
  • Stingrā režīmā: this būs undefined.

Funkcijas iekšienē:

  • Nestriktīvā režīmā: this atsauksies uz globālo objektu, ja funkcija tiek izsaukta kā parasta funkcija (myFunction()). Ja funkcija tiek izsaukta kā objekta metode (myObject.myMethod()), this atsauksies uz objektu (myObject). Ja funkcija tiek izmantota kā konstruktors (new MyClass()), this atsauksies uz jauno objekta instanci.
  • Stingrā režīmā: this būs undefined, ja funkcija tiek izsaukta kā parasta funkcija. Citās situācijās (objekta metode, konstruktors) uzvedība ir tāda pati kā nestriktīvā režīmā.

Līnijas funkcijas (=>) iekšienē:

  • this leksikāli mantojas no apkārtējās vides. Tas nozīmē, ka this vērtība līnijas funkcijas iekšienē būs tāda pati kā ārējā parastajā funkcijā vai globālajā kontekstā, kur tā tika deklarēta, neatkarīgi no tā, kā tā tiek izsaukta. Līnijas funkcijas neuztur this saistību ar savu izsaukuma kontekstu.

Piemērs:

// Globālais konteksts
console.log(this); // Pārlūkprogrammā: Window, Node.js: global (nestriktīvā režīmā)
                    // Pārlūkprogrammā: undefined, Node.js: undefined (stingrā režīmā)

// Parasta funkcija
function showThisNonStrict() {
  console.log(this);
}

showThisNonStrict(); // Pārlūkprogrammā: 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

// Līnijas funkcija
const arrowFunc = () => {
  console.log(this);
};

arrowFunc(); // Pārlūkprogrammā: Window, Node.js: global (manto no ārējā konteksta)

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

myObjectWithArrow.arrowMethod(); // Pārlūkprogrammā: Window, Node.js: global (manto no deklarācijas konteksta)