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ā):thisatsauksies uz globālo objektu (windowpārlūkprogrammā,globalNode.js). - Stingrā režīmā:
thisbūsundefined.
Funkcijas iekšienē:
- Nestriktīvā režīmā:
thisatsauksies uz globālo objektu, ja funkcija tiek izsaukta kā parasta funkcija (myFunction()). Ja funkcija tiek izsaukta kā objekta metode (myObject.myMethod()),thisatsauksies uz objektu (myObject). Ja funkcija tiek izmantota kā konstruktors (new MyClass()),thisatsauksies uz jauno objekta instanci. - Stingrā režīmā:
thisbūsundefined, 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ē:
thisleksikāli mantojas no apkārtējās vides. Tas nozīmē, kathisvē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 neuzturthissaistī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)