Sobes.tech
Junior

JavaScript'te ok işaretli fonksiyonlar ile normal fonksiyonlar arasındaki fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

  1. Sözdizimi:
    • Normal fonksiyon: function myFunction() { ... }
    • Ok fonksiyonu: () => { ... } veya param => { ... }
  2. this bağlamı:
    • Normal fonksiyon: this, çağrı bağlamına göre belirlenir.
    • Ok fonksiyonu: this, çevresel kapsamdan lexikal olarak miras alınır (kendi this'i yoktur).
  3. Yapıcılar:
    • Normal fonksiyon: Yapıcı olarak kullanılabilir (new myFunction()).
    • Ok fonksiyonu: Yapıcı olarak kullanılamaz.
  4. arguments nesnesi:
    • Normal fonksiyon: Kendi arguments nesnesine sahiptir.
    • Ok fonksiyonu: Kendi arguments nesnesi yoktur, erişim rest parametreleri (...args) ile yapılır.
  5. İsimlendirilmiş fonksiyonlar:
    • Normal fonksiyon: İsimlendirilebilir (function myFunction() { ... }).
    • Ok fonksiyonu: Varsayılan olarak anonimdir, bir değişkene atanır (const myFunction = () => { ... }).
  6. İmplicit dönüş:
    • Normal fonksiyon: Değeri döndürmek için açıkça return gerekir (sadece IIFE gibi basit durumlar hariç).
    • Ok fonksiyonu: Tek satırlık gövdeyle, return kullanmadan sonucu dolaylı olarak döndürebilir.

Karşılaştırma tablosu:

Özellik Normal fonksiyon Ok fonksiyonu
Sözdizimi function name() { ... } () => { ... }
this bağlamı Dinamik (çağrıya bağlı) Lexikal (üst kapsamdan)
Yapıcı Evet Hayır
arguments nesnesi Evet Hayır (rest parametreleri kullanılır)
İsimlendirme İsimlendirilebilir Anonim (atanır)
İmplicit dönüş Hayır (genellikle return gerekir) Evet (tek satırlık gövde için)
// Normal fonksiyon örneği
function standardFunction() {
  console.log(this); // Çağrı bağlamına bağlı
  console.log(arguments); // arguments nesnesi erişilebilir
}

const obj = {
  method: standardFunction
};

standardFunction(); // `this` window (tarayıcıda) veya undefined (katı modda)
obj.method(); // `this` obj
new standardFunction(); // `this` yeni örnektir

// Ok fonksiyonu örneği
const arrowFunction = () => {
  console.log(this); // Çevresel kapsamdan `this`'i miras alır
  // console.log(arguments); // Hata, `arguments` mevcut değil
};

const outerObj = {
  outerMethod: function() {
    const innerArrowFunction = () => {
      console.log(this); // outerMethod'dan `this`'i miras alır (outerObj)
    };
    innerArrowFunction();
  }
};

arrowFunction(); // `this` window veya {} (Node.js'de)
outerObj.outerMethod(); // innerArrowFunction'da `this` outerObj

// Ok fonksiyonunda dolaylı dönüşüm
const sum = (a, b) => a + b;
console.log(sum(2, 3)); // 5

// Normal fonksiyonla açık dönüşüm
function multiply(a, b) {
  return a * b;
}
console.log(multiply(2, 3)); // 6

// Ok fonksiyonu yapıcı olamaz
// new arrowFunction(); // Hata: TypeError: arrowFunction_1 bir yapıcı değil