الدوال (Functions) — JavaScript الأساسيات
الدوال (Functions)
الدوال هي كتل من الكود القابلة لإعادة الاستخدام تؤدي مهمة محددة.
لماذا نستخدم الدوال؟
1. إعادة الاستخدام - اكتب مرة، استخدم مرات
2. التنظيم - قسم الكود لأجزاء منطقية
3. سهولة الصيانة - عدل في مكان واحد
4. القراءة - أسماء واضحة للعمليات
طرق تعريف الدوال
1. Function Declaration
function greet(name) {
return `مرحباً ${name}!`;
}
console.log(greet("أحمد")); // مرحباً أحمد!2. Function Expression
const greet = function(name) {
return `مرحباً ${name}!`;
};
console.log(greet("محمد")); // مرحباً محمد!3. Arrow Function (ES6) ⭐
// الشكل الكامل
const greet = (name) => {
return `مرحباً ${name}!`;
};
// اختصار (بدون أقواس للمعامل الواحد)
const greetShort = name => `مرحباً ${name}!`;
// بدون معاملات
const sayHello = () => "مرحباً!";
// معاملات متعددة (تحتاج أقواس)
const add = (a, b) => a + b;المعاملات (Parameters)
المعاملات الأساسية
function add(a, b) {
return a + b;
}
console.log(add(5, 3)); // 8القيم الافتراضية
function greet(name = "زائر", greeting = "مرحباً") {
return `${greeting} ${name}!`;
}
console.log(greet()); // مرحباً زائر!
console.log(greet("أحمد")); // مرحباً أحمد!
console.log(greet("علي", "أهلاً")); // أهلاً علي!Rest Parameters (...)
function sum(...numbers) {
let total = 0;
for (let num of numbers) {
total += num;
}
return total;
}
console.log(sum(1, 2, 3)); // 6
console.log(sum(1, 2, 3, 4, 5)); // 15القيمة المُرجعة (Return)
// دالة تُرجع قيمة
function square(x) {
return x * x;
}
// دالة تُرجع كائن
function createUser(name, age) {
return {
name: name,
age: age,
isAdult: age >= 18
};
}
// دالة بدون return (ترجع undefined)
function logMessage(msg) {
console.log(msg);
}النطاق (Scope)
let globalVar = "متغير عام";
function myFunction() {
let localVar = "متغير محلي";
console.log(globalVar); // ✅ يمكن الوصول
console.log(localVar); // ✅ يمكن الوصول
}
console.log(globalVar); // ✅ يمكن الوصول
console.log(localVar); // ❌ خطأ - غير معرفClosure (الإغلاق)
function createCounter() {
let count = 0; // متغير خاص
return function() {
count++;
return count;
};
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
// لا يمكن الوصول لـ count مباشرة!Callback Functions
function processData(data, callback) {
// معالجة البيانات
let result = data.toUpperCase();
// استدعاء الدالة الممررة
callback(result);
}
processData("مرحباً", function(result) {
console.log(result); // مرحباً
});
// باستخدام Arrow Function
processData("أهلاً", result => console.log(result));Higher-Order Functions
// دالة تُرجع دالة
function multiply(factor) {
return function(number) {
return number * factor;
};
}
const double = multiply(2);
const triple = multiply(3);
console.log(double(5)); // 10
console.log(triple(5)); // 15IIFE (Immediately Invoked Function Expression)
(function() {
let secret = "كلمة سرية";
console.log("تُنفذ فوراً!");
})();
// مع معاملات
(function(name) {
console.log(`مرحباً ${name}`);
})("أحمد");// دالة بسيطة
function greet(name) {
return `مرحباً ${name}!`;
}
console.log(greet("أحمد"));
// Arrow Function
const add = (a, b) => a + b;
console.log("5 + 3 =", add(5, 3));
// دالة مع قيمة افتراضية
const multiply = (a, b = 1) => a * b;
console.log("5 * 3 =", multiply(5, 3));
console.log("5 * 1 =", multiply(5));
// Rest Parameters
const sum = (...nums) => nums.reduce((a, b) => a + b, 0);
console.log("مجموع:", sum(1, 2, 3, 4, 5));اختبر فهمك