Junior
Ką išves į konsolę, jei naudosite this console.log?
sobes.tech AI
Atsakymas iš AI
Priklausomai nuo console.log iškvietimo konteksto ir griežto režimo JavaScript ("use strict").
Pagrindiniame kontekste (už funkcijų ir modulių ribų):
- Nestriktiniame režime (
"use strict"nėra arba deklaruotas funkcijoje):thisnuoroda į globalųjį objektą (windownaršyklėje,globalNode.js). - Griežtame režime:
thisbusundefined.
Funkcijos viduje:
- Nestriktiniame režime:
thisnuoroda į globalųjį objektą, jei funkcija kviečiama kaip paprasta funkcija (myFunction()). Jei funkcija kviečiama kaip objekto metodas (myObject.myMethod()),thisnuoroda į objektą (myObject). Jei funkcija naudojama kaip konstruktorius (new MyClass()),thisnuoroda į naują objekto egzempliorių. - Griežtame režime:
thisbusundefined, jei funkcija kviečiama kaip paprasta funkcija. Kitais atvejais (objekto metodas, konstruktorius) elgsis kaip nestriktiniame režime.
Rodyklės funkcijos (=>) viduje:
thisleksiškai paveldima iš aplinkos. Tai reiškia, kadthisreikšmė rodyklės funkcijos viduje bus tokia pati kaip ir išorės įprastos funkcijos ar globalaus konteksto, kur ji buvo deklaruota, nepriklausomai nuo kvietimo būdo. Rodyklės funkcijos nesusiejathissu savo pačių kvietimo kontekstu.
Pavyzdys:
// Globalus kontekstas
console.log(this); // Naršyklėje: Window, Node.js: global (nestriktinis režimas)
// Naršyklėje: undefined, Node.js: undefined (griežtas režimas)
// Paprasta funkcija
function showThisNonStrict() {
console.log(this);
}
showThisNonStrict(); // Naršyklėje: 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
// Rodyklės funkcija
const arrowFunc = () => {
console.log(this);
};
arrowFunc(); // Naršyklėje: Window, Node.js: global (paveldi iš išorės konteksto)
const myObjectWithArrow = {
arrowMethod: () => {
console.log(this);
}
};
myObjectWithArrow.arrowMethod(); // Naršyklėje: Window, Node.js: global (paveldi iš deklaracijos konteksto)