إغلاق JavaScript شيء مثير للاهتمام للغاية. بعد قراءة بعض المعلومات ذات الصلة //www.vevb.com/article/29472.htm ، فإن الشيء الأكثر إثارة للإعجاب هو: إنه يدرك العام والخاص.
أسهل بناء جملة لإنشاء إغلاق غير مجهول هو:
نسخة الكود كما يلي:
var obj = (function () {// reades}) ؛
مثال كلاسيكي على الإغلاق:
نسخة الكود كما يلي:
var makecounter = (function () {
var i = 1 ؛
this.test = function () {
console.log (i) ؛
i ++ ؛
}
إرجاع هذا ؛
}) ؛
var obj = makecounter () ؛
obj.test () ؛ // 1
obj.test () ؛ // 2
var obj1 = makecounter () ؛
OBJ1.Test () ؛ // 1
OBJ1.Test () ؛ // 2
خاص وعامة:
نسخة الكود كما يلي:
var makecounter = (function () {
var i = 1 ؛
// هذا خاص
دالة log () {
console.log (i) ؛
i ++ ؛
}
// هذا الرجل عام
this.test () {
سجل()؛
}
إرجاع هذا ؛
}) ؛
var obj = makecounter () ؛
obj.test () ؛ // 1
obj.test () ؛ // 2
obj.log () ؛ // غير محدد
وظيفة التنفيذ الذاتي:
في المرة الأولى التي رأيت فيها مثل هذا الرمز ، شعرت: متقدم جدًا ؛
نسخة الكود كما يلي:
var obj = (function (window) {
// مجموعة متنوعة من الرموز
} (نافذة)) ؛
ثم ذهبت إلى Google ووجدت أنهم غالبًا ما يكتبون مثل هذا:
نسخة الكود كما يلي:
var obj = (function () {
var i = 1 ؛
this.test = function () {
console.log (i) ؛
i ++ ؛
}
إرجاع هذا ؛
} ()) ؛
obj.test () ؛ // 1
obj.test () ؛ // 2
أبسط فهم هو أن المبرمجين كسولون ويكتبون خطوتين في خطوة واحدة.
نسخة الكود كما يلي:
// هذه وظيفة. يجب أن تستخدم OBJ () مثل هذا
var makecounter = function () {
// مجموعة متنوعة من الرموز
}
// هذا هو كائن. إنه مشابه لـ var obj = makecounter () ؛
var obj = (function () {
// مجموعة متنوعة من الرموز
} ()) ؛
يمكن أن يكون لها أيضًا معلمات:
نسخة الكود كما يلي:
var output = "اختبار جديد" ؛
var obj = (function (msg) {
this.test = function () {
console.log (msg) ؛
}
إرجاع هذا ؛
} (الإخراج)) ؛
obj.test () ؛
يمكن أن يكون أيضًا أكثر تعقيدًا وتقدم:
نسخة الكود كما يلي:
var output = "اختبار جديد" ؛
var obj = (function (obj ، msg) {
// هذا الرجل هو أيضا خاص. على غرار OBJ.I (! = OBJ.I) ، ولكن ليس OBJ.I (لأنه لا يمكن الوصول إليه خارجيًا).
var i = 1 ؛
//خاص
دالة log () {
console.log (i + ":" + msg) ؛
i ++ ؛
}
//عام
obj.test = function () {
سجل()؛
}
إرجاع OBJ ؛
} (OBJ ، الإخراج)) ؛
obj.test () ؛ // 1: اختبار جديد
obj.i = 100 ؛
// لم أتغير
obj.test () ؛ // 2: اختبار جديد
في المرة الأولى التي التقينا فيها ، تركنا انطباعًا عميقًا. يدرك استخدام الإغلاق الحفاظ على الحالة والسمات ؛ يتجنب تحلق المتغيرات العالمية على الشاشة ؛ ينتهي الوضع المحرج حيث يتم دائمًا إعادة تعريف المتغيرات وإعادة تعيينها. يمكنه أيضًا تقسيم كائن إلى ملفات JS متعددة. إنه رائع حقًا.
ما سبق هو المحتوى الكامل لهذه المقالة ، أتمنى أن تنال إعجابك.