Junior
console.log-da this istifadə etsəniz, konsolda nə göstəriləcək?
sobes.tech Süni İntellekt
AI-dan cavab
Ça, console.log çağırışının kontekstinə və JavaScript-in sərt rejiminə ("use strict") bağlıdır.
Qlobal kontekstdə (funksiyalardan və modullardan kənarda):
- Sərt olmayan rejimdə (
"use strict"yoxdur və ya funksiyada elan olunubsa):thisqlobal obyektə istinad edir (windowbrauzerdə,globalNode.js-də). - Sərt rejimdə:
thisundefinedolacaq.
Funktion daxilində:
- Sərt olmayan rejimdə:
thisnormal funksiyanı çağırdıqda (myFunction()) qlobal obyektə istinad edir. Əgər funksiya obyektin metodu kimi çağırılırsa (myObject.myMethod()),thishəmin obyektə istinad edir (myObject). Əgər funksiya konstruktor kimi istifadə olunursa (new MyClass()),thisyeni obyekt nümunəsinə istinad edir. - Sərt rejimdə:
thisundefinedolacaq, əgər funksiya sadə funksiya kimi çağırılırsa. Digər hallarda (obyekt metodu, konstruktor) davranış sərt olmayan rejimlə eynidir.
Ok funksiyası (=>) daxilində:
thisleksikal olaraq ətraf mühitdən miras alınır. Bu, ok funksiyasının içindəkithis-in, xarici normal funksiyada və ya qlobal kontekstdə, hansı kontekstdə elan olunubsa, eyni olacağı deməkdir, çağırılma formasından asılı olmayaraq. Ok funksiyalarıthis-i öz çağırış kontekstinə bağlamır.
Nümunə:
// Qlobal kontekst
console.log(this); // Brauzer: Window, Node.js: global (sərt olmayan rejim)
// Brauzer: undefined, Node.js: undefined (sərt rejim)
// Normal funksiya
function showThisNonStrict() {
console.log(this);
}
showThisNonStrict(); // Brauzer: 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
// Ok funksiyası
const arrowFunc = () => {
console.log(this);
};
arrowFunc(); // Brauzer: Window, Node.js: global (kontekstdən miras alır)
const myObjectWithArrow = {
arrowMethod: () => {
console.log(this);
}
};
myObjectWithArrow.arrowMethod(); // Brauzer: Window, Node.js: global (kontekstdən miras alır)