Junior
Čo sa zobrazí v konzole, ak použijete this v console.log?
sobes.tech AI
Odpoveď od AI
Závisí od kontextu volania console.log a prísneho režimu JavaScript ("use strict").
V globálnom kontexte (mimo funkcií a modulov):
- V nestriktívnom režime (
"use strict"nie je prítomný alebo je deklarovaný vo funkcii):thisbude odkazovať na globálny objekt (windowv prehliadači,globalv Node.js). - V prísnom režime:
thisbudeundefined.
Vo vnútri funkcie:
- V nestriktívnom režime:
thisbude odkazovať na globálny objekt, ak je funkcia volaná ako bežná funkcia (myFunction()). Ak je funkcia volaná ako metóda objektu (myObject.myMethod()),thisbude odkazovať na objekt (myObject). Ak je funkcia použitá ako konštruktor (new MyClass()),thisbude odkazovať na nový inštanciu objektu. - V prísnom režime:
thisbudeundefined, ak je funkcia volaná ako bežná funkcia. V ostatných prípadoch (metóda objektu, konštruktor) je správanie rovnaké ako v nestriktívnom režime.
Vo vnútri šípovej funkcie (=>):
thissa leksične dedí z okolia. To znamená, že hodnotathisvo vnútri šípovej funkcie bude rovnaká ako v vonkajšej bežnej funkcii alebo v globálnom kontexte, kde bola šípková funkcia deklarovaná, nezávisle od spôsobu jej volania. Šípové funkcie nezviažuthisso svojím vlastným kontextom volania.
Príklad:
// Globálny kontext
console.log(this); // V prehliadači: Window, v Node.js: global (nestriktívny režim)
// V prehliadači: undefined, v Node.js: undefined (prísny režim)
// Bežná funkcia
function showThisNonStrict() {
console.log(this);
}
showThisNonStrict(); // V prehliadači: Window, v 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
// Šípová funkcia
const arrowFunc = () => {
console.log(this);
};
arrowFunc(); // V prehliadači: Window, v Node.js: global (zdedí z globálneho kontextu)
const myObjectWithArrow = {
arrowMethod: () => {
console.log(this);
}
};
myObjectWithArrow.arrowMethod(); // V prehliadači: Window, v Node.js: global (zdedí z kontextu deklarácie)