Junior
console.log'ta this kullanılırsa konsolda ne görüntülenir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Ça, console.log çağrısının bağlamına ve JavaScript'in katı moduna ("use strict") bağlıdır.
Küresel bağlamda (fonksiyonlar ve modüller dışında):
- Katı olmayan modda (
"use strict"yoksa veya bir fonksiyon içinde bildirilmişse):this, küresel nesneye işaret eder (windowtarayıcıda,globalNode.js'te). - Katı modda:
thisundefinedolur.
Bir fonksiyon içinde:
- Katı olmayan modda:
this, fonksiyon normal çağrıldığında (myFunction()) küresel nesneye işaret eder. Eğer fonksiyon bir nesnenin yöntemi olarak çağrılırsa (myObject.myMethod()),thisnesneye işaret eder (myObject). Fonksiyon yapıcı olarak kullanılırsa (new MyClass()),thisyeni nesne örneğine işaret eder. - Katı modda:
this, fonksiyon normal çağrıldığındaundefinedolur. Diğer durumlarda (nesne yöntemi, yapıcı) davranış katı olmayan moddakiyle aynıdır.
Ok fonksiyonu (=>) içinde:
this, çevresel bağlamdan lexikal olarak miras alınır. Bu, ok fonksiyonunun içindekithisdeğerinin, dıştaki normal fonksiyon veya tanımlandığı küresel bağlamdakiyle aynı olacağı anlamına gelir, çağrılma şekli ne olursa olsun. Ok fonksiyonlarıthis'i kendi çağrı bağlamına bağlamaz.
Örnek:
// Küresel bağlam
console.log(this); // Tarayıcıda: Window, Node.js'te: global (katı olmayan mod)
// Tarayıcıda: undefined, Node.js'te: undefined (katı mod)
// Normal fonksiyon
function showThisNonStrict() {
console.log(this);
}
showThisNonStrict(); // Tarayıcıda: Window, Node.js'te: 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 fonksiyonu
const arrowFunc = () => {
console.log(this);
};
arrowFunc(); // Tarayıcıda: Window, Node.js'te: global (tanımlama bağlamından miras alır)
const myObjectWithArrow = {
arrowMethod: () => {
console.log(this);
}
};
myObjectWithArrow.arrowMethod(); // Tarayıcıda: Window, Node.js'te: global (tanımlama bağlamından miras alır)