Junior
Co se zobrazí v konzoli, pokud použijete this v console.log?
sobes.tech AI
Odpověď od AI
Závisí na kontextu volání console.log a režimu přísnosti JavaScriptu ("use strict").
V globálním kontextu (mimo funkce a moduly):
- V ne-strikt režimu (
"use strict"chybí nebo je deklarován ve funkci):thisodkazuje na globální objekt (windowv prohlížeči,globalv Node.js). - V přísném režimu:
thisbudeundefined.
Uvnitř funkce:
- V ne-strikt režimu:
thisodkazuje na globální objekt, pokud je funkce volána jako běžná funkce (myFunction()). Pokud je funkce volána jako metoda objektu (myObject.myMethod()),thisodkazuje na tento objekt (myObject). Pokud je funkce použita jako konstruktor (new MyClass()),thisodkazuje na novou instanci objektu. - V přísném režimu:
thisbudeundefined, pokud je funkce volána jako běžná funkce. V ostatních případech (metoda objektu, konstruktor) je chování stejné jako v ne-strikt režimu.
Uvnitř šipkové funkce (=>):
thisje lexikálně děděno z okolního kontextu. To znamená, že hodnotathisuvnitř šipkové funkce bude stejná jako v externí běžné funkci nebo v globálním kontextu, kde byla deklarována, bez ohledu na to, jak je volána. Šipkové funkce nezachycujíthisve svém vlastním kontextu volání.
Příklad:
// Globální kontext
console.log(this); // V prohlížeči: Window, v Node.js: global (nepřísný režim)
// V prohlížeči: undefined, v Node.js: undefined (přísný režim)
// Běžná funkce
function showThisNonStrict() {
console.log(this);
}
showThisNonStrict(); // V prohlížeč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
// Šipková funkce
const arrowFunc = () => {
console.log(this);
};
arrowFunc(); // V prohlížeči: Window, v Node.js: global (dědí z globálního kontextu)
const myObjectWithArrow = {
arrowMethod: () => {
console.log(this);
}
};
myObjectWithArrow.arrowMethod(); // V prohlížeči: Window, v Node.js: global (dědí z deklarace kontextu)