Middle
Ok fonksiyonlar ile normal fonksiyonlar arasındaki fark, bind metodunun kullanılma gerekliliği açısından nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Ok işaretli fonksiyonlar kendi this bağlamına sahip değildir. Çevresel alan (lexical ortam) içinden this'i yakalarlar.
Normal fonksiyonlar, çağrılma şekline bağlı olarak kendi this'lerini belirler:
- Küresel bağlamda (
windowveyaglobal). - Bir nesnenin metodu olarak (
thisnesneye işaret eder). - Yapıcı (constructor) olarak (
thisyeni örneğe işaret eder). call,applyveyabindkullanılarak (thisaçıkça ayarlanır).
Çünkü ok fonksiyonlarının kendi this'i yoktur, bir ok fonksiyonuna bind çağrısı yapmak anlamlı değildir ve bağlamış this'i değiştirmez. Bir ok fonksiyonuna bind çağrısı yapmaya çalışırsanız, fonksiyon kendisini geri döner.
Örnek:
// Normal fonksiyon
const normalFunc = function() {
console.log(this.name);
};
const obj1 = { name: 'Obje 1', method: normalFunc };
const obj2 = { name: 'Obje 2' };
obj1.method(); // Çıktı: Obje 1
const boundFunc = normalFunc.bind(obj2);
boundFunc(); // Çıktı: Obje 2 (this başarıyla değiştirildi)
// Ok fonksiyonu
const arrowFunc = () => {
console.log(this.name);
};
const obj3 = { name: 'Obje 3' };
// ArrowFunc çevresel bağlamdan this'i yakalar (bu durumda, küresel nesne)
arrowFunc(); // Çıktı: undefined (muhtemelen, çünkü this name içermiyor)
const boundArrowFunc = arrowFunc.bind(obj3);
boundArrowFunc(); // Çıktı: undefined (this değişmedi, bind etkili olmadı)
// this yakalama örneği
const person = {
name: 'Alice',
greet: function() {
// Burada, this `person`'a işaret eder
const greetLater = () => {
// Burada, this dış fonksiyonun çevresel bağlamından yakalanır, yani yine `person`
console.log(`Merhaba, ${this.name}!`);
};
greetLater();
}
};
person.greet(); // Çıktı: Merhaba, Alice!
Sonuç olarak, bind normal fonksiyonlar için this bağlamını açıkça ayarlamak için gereklidir, oysa ok fonksiyonları için gereksizdir çünkü this'leri lexikal olarak belirlenir ve bind ile değiştirilemez.