CodeBlanks Logo Icon CodeBlanks

Arrow vs function

JavaScript kursu · Orta seviye · Ders 5/134

Arrow fonksiyonların ne zaman kullanılamayacağını (constructor, arguments) öğrenirsin.

Arrow constructor olamaz

Arrow fonksiyonlar constructor olarak kullanılamaz; new ile çağrılırsa hata fırlatır. Ayrıca prototype özellikleri yoktur.

const Dog = (name) => { this.name = name; };
new Dog("Karabaş"); // TypeError

Nesne üretmek için klasik fonksiyon veya class kullanmalısın. Arrow bu durumda çalışmaz ve başka bir yol seçmen gerekir.

arguments nesnesi yoktur

Arrow fonksiyonların kendi arguments nesnesi yoktur. Klasik fonksiyondaki gibi tüm girilen parametrelere ulaşamazsın; arguments dış kapsamdakini gösterir.

const f = () => {
  console.log(arguments); // dış kapsamın arguments
};

Bunun yerine rest parameter ...args kullanırsın:

const f = (...args) => args;

Rest parametre gerçek bir dizi döndürür; arguments dizi benzeridir ama dizi değildir.

Uygulama arguments'li fonksiyonu arrow'a çevir

sumAll klasik fonksiyonu arguments kullanıyor. Onu arrow fonksiyona çevir, rest parametre ...numbers kullan ve reduce ile toplamı döndür.

Örnek çözümü göster
const sumAll = (...numbers) => numbers.reduce((acc, n) => acc + n, 0);

Kendini test et

  1. Hangisi hata fırlatır?

    • const f = (a, b) => a + b;
    • const f = n => n * 2;
    • const f = () => 0;
    • const f = (n) => { this.n = n; }; new f(5);
    Cevabı göster

    const f = (n) => { this.n = n; }; new f(5); — Doğru. Arrow <code>new</code> ile çağrılamaz, TypeError fırlatır.

  2. arguments yerine rest

    const sum = (____) => args.reduce((a, b) => a + b, 0);
    Cevabı göster
    const sum = (...args) => args.reduce((a, b) => a + b, 0);
  3. Özellikleri eşleştir

    new arrow
    TypeError fırlatır
    arguments arrow
    dış kapsamınkini gösterir
    rest parametre
    gerçek dizi verir
  4. Arrow'u kullanmamak gereken durum?

    • Nesne üreten constructor olarak
    • Dizi callback olarak map içinde
    • Kısa tek satırlık hesap fonksiyonu
    • setTimeout callback olarak this korumak
    Cevabı göster

    Nesne üreten constructor olarak — Doğru. Arrow constructor olamaz; <code>new</code> ile hata verir.

Orta seviye bölümündeki tüm dersler