Junior
JavaScript'te ok işaretli fonksiyonlar ile normal fonksiyonlar arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
- Sözdizimi:
- Normal fonksiyon:
function myFunction() { ... } - Ok fonksiyonu:
() => { ... }veyaparam => { ... }
- Normal fonksiyon:
thisbağlamı:- Normal fonksiyon:
this, çağrı bağlamına göre belirlenir. - Ok fonksiyonu:
this, çevresel kapsamdan lexikal olarak miras alınır (kendithis'i yoktur).
- Normal fonksiyon:
- Yapıcılar:
- Normal fonksiyon: Yapıcı olarak kullanılabilir (
new myFunction()). - Ok fonksiyonu: Yapıcı olarak kullanılamaz.
- Normal fonksiyon: Yapıcı olarak kullanılabilir (
argumentsnesnesi:- Normal fonksiyon: Kendi
argumentsnesnesine sahiptir. - Ok fonksiyonu: Kendi
argumentsnesnesi yoktur, erişim rest parametreleri (...args) ile yapılır.
- Normal fonksiyon: Kendi
- İsimlendirilmiş fonksiyonlar:
- Normal fonksiyon: İsimlendirilebilir (
function myFunction() { ... }). - Ok fonksiyonu: Varsayılan olarak anonimdir, bir değişkene atanır (
const myFunction = () => { ... }).
- Normal fonksiyon: İsimlendirilebilir (
- İmplicit dönüş:
- Normal fonksiyon: Değeri döndürmek için açıkça
returngerekir (sadece IIFE gibi basit durumlar hariç). - Ok fonksiyonu: Tek satırlık gövdeyle,
returnkullanmadan sonucu dolaylı olarak döndürebilir.
- Normal fonksiyon: Değeri döndürmek için açıkça
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