نمط الوحدة (IIFE)
غلّفوا التعليمات البرمجية باستخدام دوال تُستدعى فورًا.
نمط الوحدة (IIFE) درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 4 دروس في المجموع.
ما المشكلة التي يحلها نمط الوحدات
قبل وحدات ES، أتاح نمط الوحدات تجميع الحالة والسلوك المرتبطين مع إبقاء التفاصيل الداخلية خاصة وعرض واجهة API عامة ونظيفة. وهو مبني على الإغلاقات.
دالة IIFE
إن IIFE (تعبير الدالة المُستدعى فورًا) هي دالة تُنفَّذ لحظة تعريفها. ويؤدي وضعها بين قوسين واستدعاؤها إلى إنشاء نطاق خاص على الفور.
const result = (function () {
return 42;
})();
console.log(result); // 42لماذا نُنفّذها فورًا
توفر IIFE نطاقًا خاصًا يُستخدم مرة واحدة، من دون ترك دالة مسماة غير مستخدمة. وكل ما بداخلها معزول عن النطاق العام.
(function () {
const temp = "not global";
console.log(temp);
})();
// temp is unreachable out hereإعادة واجهة API عامة
نمط الوحدات هو IIFE تُعيد كائنًا. وتكون طرائق الكائن إغلاقات على المتغيرات الخاصة، فتشكّل الواجهة العامة.
const counter = (function () {
let count = 0; // private
return {
inc: () => ++count,
value: () => count
};
})();
counter.inc();
console.log(counter.value()); // 1خاص مقابل عام
كل ما يُعرَّف في الداخل ولا يُعاد يظل خاصًا. ولا يمكن الوصول إلا إلى ما تضعونه في الكائن المُعاد.
const calc = (function () {
const pi = 3.14159; // private constant
return {
area: (r) => pi * r * r
};
})();
console.log(calc.area(2)); // 12.56636
console.log(calc.pi); // undefinedدوال مساعدة خاصة
يمكن أن توجد الدوال المساعدة داخل الوحدة، فتستخدمها الطرائق العامة من دون عرضها مطلقًا.
const validator = (function () {
const clean = (s) => s.trim().toLowerCase(); // private
return {
isEmail: (s) => clean(s).includes("@")
};
})();
console.log(validator.isEmail(" A@B.com ")); // trueنمط الوحدات الكاشف
يعرّف أحد الأنواع الشائعة جميع الدوال على أنها خاصة، ثم يُعيد كائنًا «يكشف» مراجع إلى الدوال العامة. ويساعد ذلك على إبقاء قائمة واجهة API العامة واضحة في الأسفل.
const store = (function () {
let items = [];
function add(x) { items.push(x); }
function count() { return items.length; }
return { add, count }; // reveal
})();
store.add("a");
console.log(store.count()); // 1المثيلات المفردة
بما أن IIFE تُنفَّذ مرة واحدة، تكون الوحدة فعليًا مثيلًا مفردًا: مثيل واحد بالضبط، مع مجموعة واحدة من الحالة الخاصة.
const config = (function () {
let settings = { theme: "dark" };
return {
get: (k) => settings[k],
set: (k, v) => { settings[k] = v; }
};
})();
config.set("theme", "light");
console.log(config.get("theme")); // "light"تمرير التبعيات
يمكنكم تمرير الكائنات العامة أو الوحدات الأخرى كوسائط إلى IIFE، مما يجعل التبعيات صريحة ويتيح التصغير الآمن.
const mathUtils = (function (M) {
return { roundUp: (n) => M.ceil(n) };
})(Math);
console.log(mathUtils.roundUp(4.1)); // 5تجنب تلويث النطاق العام
الهدف كله هو استخدام اسم عام واحد (للوحدة) بدلًا من عشرات المتغيرات المنفصلة. ويمنع ذلك تعارضات الأسماء بين البرامج النصية.
العلاقة بوحدات ES
توفّر import/export اليوم نطاق وحدة حقيقيًا على مستوى اللغة، وقد حلت إلى حد كبير محل هذا النمط. لكن فهم وحدات IIFE يوضح كيفية عمل الخصوصية والتغليف، وستصادفونها أيضًا في الشيفرة القديمة.
تحقق سريع
نمط الوحدات وIIFE
مراجعة
يستخدم نمط الوحدات IIFE لإنشاء نطاق خاص، ثم يُعيد كائنًا تكون طرائقه إغلاقات على حالة مخفية. تظل التفاصيل الداخلية خاصة، ولا تكون عامة إلا الأعضاء المُعادة. وتوضح الأنواع المختلفة، مثل نمط الوحدات الكاشف، واجهة API، كما تعمل الوحدات كمثيلات مفردة. تحل import/export في ES الآن محل هذا النمط، لكنها مبنية على الأفكار نفسها.
الأسئلة الشائعة
هل درس «نمط الوحدة (IIFE)» مجاني؟
نعم — نص درس «نمط الوحدة (IIFE)» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «نمط الوحدة (IIFE)»؟
غلّفوا التعليمات البرمجية باستخدام دوال تُستدعى فورًا. تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟
لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «نمط الوحدة (IIFE)»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟
نعم. كل درس في JavaScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.