Arrow vs function
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ş"); // TypeErrorNesne ü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
-
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.
-
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); -
Özellikleri eşleştir
- new arrow
- TypeError fırlatır
- arguments arrow
- dış kapsamınkini gösterir
- rest parametre
- gerçek dizi verir
-
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.