Sobes.tech
Junior

Fonksiyon ifadesi (function expression) ile fonksiyon bildirimi (function declaration) arasındaki farklar hakkında ne biliyorsun?

sobes.tech yapay zeka

AI'dan gelen yanıt

Fonksiyon ifadesi isimli veya anonim olabilir. Fonksiyon bildirimi her zaman bir isme sahiptir.

Ana fark, yükseltme (hoisting) mekanizmasıdır:

  • Fonksiyon bildirimi: Tamamen yükseltilir, gövde dahil. Fonksiyon, gerçek bildirimi öncesinde kodda çağrılabilir.
  • Fonksiyon ifadesi: Sadece ona atanan değişken yükseltilir (eğer var kullanılırsa). Fonksiyon kendisi, yorumlayıcı onun tanımına ulaştığında kullanılabilir hale gelir. let ve const ile değişkenler için yükseltme yoktur.
// Fonksiyon bildirimi
console.log(declarationFunc()); // Çalışır, fonksiyon yükseltilmiş

function declarationFunc() {
  return "Ben bir bildirimim";
}

// Fonksiyon ifadesi
// console.log(expressionFunc()); // TypeError veya ReferenceError verir (var/let/const'e bağlı olarak)

const expressionFunc = function() {
  return "Ben bir ifade";
};

console.log(expressionFunc()); // Tanımlamadan sonra çalışır

Fonksiyon bildirimleri, kodda sıralama önemli olmadığı için tercih edilir. Fonksiyon ifadeleri genellikle kullanılır:

  • Anonim fonksiyonlar oluşturmak için (örneğin, argüman olarak veya hemen çağrılan fonksiyon ifadeleri - IIFE).
  • Koşullu fonksiyon tanımlamaları.
  • Kapanışlar (closures) oluşturmak için.