Sobes.tech
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 (window tarayıcıda, global Node.js'te).
  • Katı modda: this undefined olur.

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()), this nesneye işaret eder (myObject). Fonksiyon yapıcı olarak kullanılırsa (new MyClass()), this yeni nesne örneğine işaret eder.
  • Katı modda: this, fonksiyon normal çağrıldığında undefined olur. 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çindeki this değ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)