۴. توابع و مباحث مرتبط
۱.تعریف و فراخوانی توابع
توابع مثل جادوی کوچیک برنامهنویسی هستن که کد رو تمیز و قابل استفاده مجدد میکنن! ✨
- تعریف تابع:
با استفاده از کلمه کلیدی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("سلام! این تابع قبل از تعریف هم کار میکنه! 😉");
}
با آرزوی موفقیت
تیم برندآرا 🤖