الدالة المجهولة: هي دالة لا تحتوي على اسم عند تعريفها. تُكتب غالبًا كـ:
function() {
// كود الدالة
}
JavaScriptلا يمكنك استدعاؤها مباشرة بهذا الشكل، بل يجب أن:
- تُخزن في متغير.
- تُمرر كوسيط داخل دالة أخرى (كـ callback).
- تُستخدم مباشرة في مكان واحد (مثل IIFE أو event handlers).
✅ أنواع واستخدامات الدوال المجهولة
1. ✅ كـ Function Expression
const greet = function() {
console.log("مرحباً!");
};
greet(); // مرحباً!
JavaScriptهنا الدالة لا تملك اسمًا (ليست
function greet()
)، بل تم تخزينها في متغير.
2. ✅ كـ Callback Function (أشهر استخدام)
📌 مثال مع setTimeout
:
setTimeout(function() {
console.log("مرحبًا بعد 2 ثانية");
}, 2000);
JavaScript📌 مثال مع Array.forEach()
:
let names = ["أحمد", "منى", "خالد"];
names.forEach(function(name) {
console.log("مرحبًا " + name);
});
JavaScript4. ✅ الدوال السهمية المجهولة
نفس الشيء لكن بطريقة أقصر:
setTimeout(() => {
console.log("هذا من دالة سهمية مجهولة");
}, 1000);
JavaScript⭐️ فوائد الدوال المجهولة
الفائدة | التوضيح |
---|---|
تقليل التكرار | لا تحتاج لتعريف اسم دالة لكل استخدام بسيط. |
عزل الكود | مثل IIFE لمنع تداخل المتغيرات في النطاق العام. |
تسهيل التعامل مع الأحداث | في onclick , setTimeout , وغيرها. |
قوة مع البرمجة الوظيفية | تستخدم في map , filter , reduce |
⚠️ ملاحظات مهمة
- لا يمكن استدعاء دالة مجهولة قبل تعريفها (لأنها ليست hoisted).
- يصعب تتبع الأخطاء في الكونسول إذا كانت الدالة بدون اسم (لذلك أحيانًا نستخدم دوال مُسماة داخل تعبير).
📌 مثال على دالة مسماة داخل تعبير:
const sum = function add(a, b) {
return a + b;
};
JavaScriptالآن لو حصل خطأ، ستُعرض كلمة
add
في الرسائل لتسهيل التتبع.
من أشهر استخدامات الدوال المجهولة (Anonymous Functions) هو ربط الأحداث (Events) خاصة في المتصفحات مثل:
🎯 الأماكن الشائعة لاستخدام الدوال المجهولة:
element.addEventListener("click", function() {
// كود تنفيذ عند الضغط
});
JavaScript✅ مثال عملي: زر يطبع رسالة عند الضغط
📄 HTML:
////////////////////////////////Html code
<button id="btn">اضغط هنا</button>
//////////////////////Javascript code
document.getElementById("btn").addEventListener("click", function() {
alert("تم الضغط على الزر!");
});
JavaScript✅ الشرح:
function() { ... }
← دالة مجهولة (ليس لها اسم).- يتم تنفيذها فقط عند الضغط على الزر.
- لم نحتج لتعريفها مسبقًا؛ كتبناها مباشرة داخل
addEventListener
.
🧠 لماذا نستخدم الدالة المجهولة هنا؟
السبب | الفائدة |
---|---|
📌 الدالة قصيرة ومخصصة للاستخدام مرة واحدة فقط | |
📌 لا حاجة لإعطائها اسمًا لأننا لن نستخدمها في مكان آخر | |
📌 تبقي الكود منظمًا داخل الحدث مباشرة |
🎯 الأماكن الشائعة لاستخدام الدوال المجهولة:
المكان | المثال |
---|---|
توقيت | setTimeout(function(){}, 1000) |
تكرار على مصفوفة | array.forEach(function(item){}) |
رد نداء | fetch(...).then(function(response){}) |
الحدث | element.addEventListener("click", function(){}) |
دالة فورية | (function(){})(); |
✅ ما هي الدالة السهمية (Arrow Function)؟
الدالة السهمية هي طريقة مختصرة لتعريف الدوال، تم تقديمها في ES6 عام 2015.
بديل أخف وأقصر للدالة التقليدية، وغالبًا تستخدم في المهام البسيطة.
هي طريقة مختصرة لتعريف الدوال (functions) في JavaScript، وتكتب باستخدام =>
بدلاً من الكلمة المفتاحية function
.
📌 الشكل الكامل:
const functionName = (parameters) => {
// الكود هنا
};
JavaScriptمثال:
const sayHello = () => {
console.log("مرحبًا!");
};
sayHello(); // مرحبًا!
JavaScript✅ الاستخدام مع المعاملات:
معامل واحد فقط (بدون أقواس):
const greet = name => {
console.log("أهلاً، " + name);
};
greet("ياسين"); // أهلاً، ياسين
JavaScript2. أكثر من معامل (يجب استخدام الأقواس):
const add = (a, b) => {
return a + b;
};
console.log(add(3, 4)); // 7
JavaScript✅ الإرجاع الضمني (Implicit Return)
إذا كانت الدالة تحتوي على سطر واحد فقط يُرجع قيمة، يمكنك حذف {}
و return
:
const multiply = (a, b) => a * b;
console.log(multiply(3, 5)); // 15
JavaScript✅ أين تُستخدم الدوال السهمية بكثرة؟
الدوال السهمية تُستخدم بكثرة في JavaScript، خصوصًا في البرمجة الحديثة، لما توفره من اختصار في الكتابة وسلوكها المختلف في التعامل مع this
.
إليك أهم الأماكن التي تُستخدم فيها:
✅ أكثر استخدامات الدوال السهمية شيوعًا
المجال | الاستخدام | |
---|---|---|
🔁 التكرار على المصفوفات | map , filter , forEach , reduce |
const nums = [1, 2, 3];
const doubled = nums.map(n => n * 2);
console.log(doubled); // [2, 4, 6]
JavaScript📆 التوابع الزمنية | setTimeout
, setInterval
|
setTimeout(() => console.log("بعد 3 ثواني"), 3000);
JavaScript| 🧠 الـ Callback Functions | تمرير دوال بشكل مؤقت |
document.addEventListener("click", () => {
console.log("تم النقر");
});
JavaScript🧱 الدوال القصيرة التي ترجع قيمة | بدون return ولا أقواس |
const square = x => x * x;
console.log(square(4)); // 16
JavaScriptفي الوعود (Promises) | then
, catch
, finally
|
fetch("https://api.example.com")
.then(res => res.json())
.then(data => console.log(data));
JavaScript📐 مع الكائنات في React وغيره | ربط event handlers بدون this |
const Button = () => {
const handleClick = () => console.log("تم الضغط");
return <button onClick={handleClick}>اضغط</button>;
};
JavaScript