Skip to main content

۴. توابع و مباحث مرتبط

۱.تعریف و فراخوانی توابع

توابع مثل جادوی کوچیک برنامه‌نویسی هستن که کد رو تمیز و قابل استفاده مجدد می‌کنن! ✨

  • تعریف تابع:
    با استفاده از کلمه کلیدی function می‌تونیم یه تابع تعریف کنیم.
  • فراخوانی تابع:
    کافیست اسم تابع رو صدا بزنیم و پارامترها رو (در صورت نیاز) داخل پرانتز قرار بدیم.
    اینطوری می‌تونیم از کدهای تکراری جلوگیری کنیم و پروژه رو سازمان‌یافته نگه داریم. 😊
// تعریف یک تابع ساده
function greet(name) {
console.log("سلام " + name + "، خوش آمدی! 😊");
}

// فراخوانی تابع
greet("Ali");

۲.توابع پیکان (Arrow Functions)

این روش نوشتن تابع جدید و خیلی مختصر از ES6 هست:

  • نحوه تعریف:
    به جای کلمه function از علامت => استفاده می‌کنیم.
  • تفاوت‌های نحوی:
    • نیازی به نوشتن کلمه function نیست.
    • در صورت داشتن تنها یک عبارت، می‌تونیم آکولادها رو حذف کنیم و مستقیماً مقدار رو برگردونیم.
  • کاربردهای ویژه:
    برای نوشتن توابع کوتاه، خواناتر و جلوگیری از ایجاد context اضافی، این روش فوق‌العاده‌س! 🚀
// تابعی که ورودی را دو برابر می‌کند (بدون آکولاد)
const double = num => num * 2;
console.log(double(5)); // خروجی: 10

const plusOne = num =>{
num++
return num
}

console.log(plusOne(1))

۳.مفاهیم پیشرفته

Closure

  • Closure یعنی یه تابع می‌تونه به متغیرهای محیطی خودش (حتی بعد از اتمام اجرای تابع والد) دسترسی داشته باشه.
  • این قابلیت باعث می‌شه که بتونیم داده‌ها رو در حافظه نگه داریم بدون اینکه به صورت سراسری منتشر بشن. 🤯
function createCounter() {
let count = 0;
return function() {
count++;
return count;
}
}

const counter = createCounter();
console.log(counter()); // خروجی: 1
console.log(counter()); // خروجی: 2

IIFE (Immediately Invoked Function Expression)

  • IIFE یا همان "تابع خوداجرا" بلافاصله بعد از تعریف اجرا می‌شه.
  • هدف اصلی از استفاده از IIFE جلوگیری از درهم‌ریختگی متغیرها و ایجاد scope مخصوص هست.
  • خیلی وقتا برای محصور کردن متغیرها در یک بلوک کد به کار میره. 🔒
(function() {
let message = "این یک IIFE هست! 🔒";
console.log(message);
})();

مفهوم hoisting در توابع

  • Hoisting به معنای بالا بردن است: در جاوااسکریپت، توابع به بالای محدوده (scope) خودشون "می‌روند".
  • این یعنی شما می‌تونید یه تابع رو قبل از تعریفش صدا بزنید و هنوز هم به درستی کار کنه!
  • اما توصیه می‌شه از این ویژگی با دقت استفاده کنید تا کد گیج‌کننده نشه. 😉
// فراخوانی تابع قبل از تعریفش
sayHello();

function sayHello() {
console.log("سلام! این تابع قبل از تعریف هم کار می‌کنه! 😉");
}

با آرزوی موفقیت
تیم برندآرا 🤖