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):thisviitab globaalsele objektile (windowbrauseris,globalNode.js-is). - Range režiimis:
thisonundefined.
Funktsiooni sees:
- Nestriktse režiimis:
thisviitab globaalsele objektile, kui funktsioon kutsutakse kui tavaline funktsioon (myFunction()). Kui funktsioon kutsutakse objekti meetodina (myObject.myMethod()), viitabthisobjekti (myObject). Kui funktsioon kasutatakse konstruktorina (new MyClass()), viitabthisuuele objekti eksemplarile. - Range režiimis:
thisonundefined, kui funktsioon kutsutakse kui tavaline funktsioon. Muudes olukordades (objekti meetod, konstruktor) on käitumine sama mis nestriktse režiimis.
Noolefunktsiooni (=>) sees:
thispärandub leksikaalselt ümbritsevast kontekstist. See tähendab, etthisvää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 seostathis-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)