Function Definitions

در جاوااسکریپت چندین روش مختلف برای تعریف تابع وجود داره. هر کدوم کاربرد و رفتار خاص خودشون رو دارن.


1️⃣ Function Declaration (تعریف تابع کلاسیک)

function sayHello() { return "Hello World!"; } console.log(sayHello()); // Hello World!
  • می‌تونی تابع رو هر جایی صدا بزنی، حتی قبل از تعریف (به خاطر Hoisting).

2️⃣ Function Expression (تابع به صورت متغیر)

const sayHello = function() { return "Hello JavaScript!"; }; console.log(sayHello()); // Hello JavaScript!
  • تابع داخل یک متغیر ذخیره میشه.

  • Hoisting نداره (یعنی باید بعد از تعریف صدا زده بشه).

3️⃣ Arrow Function (تابع پیکانی)

نسخه کوتاه‌تر و مدرن‌تر تابع‌ها.

const sayHello = () => "Hello Arrow!"; console.log(sayHello()); // Hello Arrow!

🔹 تفاوت مهم:

  • خودشون this ندارن (از context بیرونی می‌گیرن).

  • برای فانکشن‌های ساده خیلی کوتاه و خواناست.

4️⃣ Function Constructor (به‌ندرت استفاده میشه)

const sum = new Function("a", "b", "return a + b"); console.log(sum(3, 4)); // 7

📌 این روش کمتر استفاده میشه، چون هم پیچیده‌ست، هم امنیت کمتری داره.

5️⃣ Immediately Invoked Function Expression (IIFE)

تابعی که همون لحظه که تعریف میشه اجرا هم میشه.

(function() { console.log("IIFE is running!"); })();

کاربرد: جلوگیری از آلوده شدن فضای global.

6️⃣ Anonymous Functions (تابع بی‌نام)

تابعی که اسم نداره، معمولاً داخل callback ها استفاده میشه:

setTimeout(function() { console.log("This runs after 2 seconds"); }, 2000);

📌 جمع‌بندی

  • Declaration → تعریف کلاسیک (با hoisting).

  • Expression → داخل متغیر (بدون hoisting).

  • Arrow → کوتاه و مدرن (بدون this خودش).

  • Constructor → خیلی کم استفاده میشه.

  • IIFE → اجرای فوری تابع.

  • Anonymous → بدون نام، برای callbackها.