Junior
Co zostanie wyświetlone w konsoli, jeśli użyjesz this w console.log?
sobes.tech AI
Odpowiedź od AI
To zależy od kontekstu wywołania console.log i trybu ścisłego JavaScript ("use strict").
W kontekście globalnym (poza funkcjami i modułami):
- W trybie nieścisłym (
"use strict"jest nieobecny lub zadeklarowany w funkcji):thisodnosi się do obiektu globalnego (windoww przeglądarce,globalw Node.js). - W trybie ścisłym:
thisbędzieundefined.
Wewnątrz funkcji:
- W trybie nieścisłym:
thisodnosi się do obiektu globalnego, jeśli funkcja jest wywoływana jako zwykła funkcja (myFunction()). Jeśli funkcja jest wywoływana jako metoda obiektu (myObject.myMethod()),thisodnosi się do obiektu (myObject). Jeśli funkcja jest używana jako konstruktor (new MyClass()),thisodnosi się do nowej instancji obiektu. - W trybie ścisłym:
thisbędzieundefined, jeśli funkcja jest wywoływana jako zwykła funkcja. W innych przypadkach (metoda obiektu, konstruktor) zachowanie jest takie samo jak w trybie nieścisłym.
Wewnątrz funkcji strzałkowej (=>):
thisjest dziedziczone leksykalnie z otaczającego kontekstu. Oznacza to, że wartośćthiswewnątrz funkcji strzałkowej będzie taka sama jak w zewnętrznej zwykłej funkcji lub w kontekście globalnym, w którym została zadeklarowana, niezależnie od tego, jak jest wywoływana. Funkcje strzałkowe nie wiążąthisz własnym kontekstem wywołania.
Przykład:
// Kontekst globalny
console.log(this); // W przeglądarce: Window, w Node.js: global (tryb nieścisły)
// W przeglądarce: undefined, w Node.js: undefined (tryb ścisły)
// Funkcja zwykła
function showThisNonStrict() {
console.log(this);
}
showThisNonStrict(); // W przeglądarce: Window, w 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
// Funkcja strzałkowa
const arrowFunc = () => {
console.log(this);
};
arrowFunc(); // W przeglądarce: Window, w Node.js: global (dziedziczy z kontekstu globalnego)
const myObjectWithArrow = {
arrowMethod: () => {
console.log(this);
}
};
myObjectWithArrow.arrowMethod(); // W przeglądarce: Window, w Node.js: global (dziedziczy z kontekstu deklaracji)