Sobes.tech
Junior

JavaScript'te klasik fonksiyon ile ok fonksiyonu arasındaki fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Temel fark, this ile nasıl çalıştıklarıdır.

Klasik bir fonksiyonun kendi this nesnesi vardır ve bu, çağrıldığı bağlam tarafından belirlenir (nasıl çağrıldığına bağlıdır).

Ok fonksiyonunun ise kendi this nesnesi yoktur. O, tanımlandığı ortamdan this lexical olarak miras alır.

Diğer farklar:

  • arguments nesnesi: Klasik fonksiyonlar arguments nesnesine erişebilir, ok fonksiyonları ise erişemez (ama rest parametreleri kullanabilirler).
  • Yapıcılar: Klasik fonksiyonlar new operatörü ile yapıcı olarak kullanılabilir. Ok fonksiyonları kullanılamaz.
  • prototype özelliği: Klasik fonksiyonların prototype özelliği vardır. Ok fonksiyonlarının yoktur.

this ile çalışma örneği:

// Klasik fonksiyon örneği
const obj = {
  name: 'Nesne',
  greet: function() {
    console.log(this.name); // this, obj'e referans verir
  }
};

obj.greet(); // Çıktı: Nesne

const greetFunc = obj.greet;
greetFunc(); // Çıktı: undefined (veya tarayıcıda Window) - this, bağlamını kaybeder
// Ok fonksiyonu örneği
const objArrow = {
  name: 'Ok ile nesne',
  greet: () => {
    console.log(this.name); // this, dış bağlamı miras alır (bu durumda global veya Window)
  }
};

objArrow.greet(); // Çıktı: undefined (veya tarayıcıda pencere adı, eğer name global olarak tanımlıysa)

const greetArrowFunc = objArrow.greet;
greetArrowFunc(); // Çıktı: undefined (veya tarayıcıda pencere adı) - this değişmez