يجب أن يشير الإغلاق المزعوم إلى: وظيفة داخلية تقرأ المتغيرات غير الوظيفة الحالية ، أي بيئة السياق التي تم إنشاؤها.
نسخة الكود كما يلي:
وظيفة مرحبا () {
var char = "Hello ، World" ؛
وظيفة print () {
console.log (char) ؛
} ؛
إرجاع print () ؛
}
تجدر الإشارة إلى أن وظيفة الطباعة هنا تشير إلى متغير char في وظيفة Hello الخارجية ، لذلك يمكننا هنا إرجاع أ
نسخة الكود كما يلي:
مرحبا بالعالم
بمعنى ما ، يجب أن تعزى هذه الوظيفة إلى النطاق. بالطبع ، ليس لدينا طريقة للوصول إلى Char مباشرة ، ما لم يكن هناك خطأ عندما نعلن هذا المتغير. يحب
نسخة الكود كما يلي:
وظيفة مرحبا () {
char = "Hello ، World" ؛
وظيفة print () {
console.log (char) ؛
} ؛
إرجاع print () ؛
}
فقط لأن هناك var مفقود.
نسخة الكود كما يلي:
هنا يصبح مرحبا إغلاق. الإغلاق هو كائن خاص. يتكون من جزأين: وظيفة ، والبيئة التي يتم إنشاء الوظيفة فيها. تتكون البيئة من أي متغيرات محلية في النطاق عند إنشاء الإغلاق.
إغلاق جافا سكريبت وهذا
تجدر الإشارة إلى أنه قد تكون هناك مشاكل عند قراءة هذا وحجج.
نسخة الكود كما يلي:
وظيفة مرحبا () {
this.char = "Hello ، World" ؛
إخراج الوظيفة () {
char = "أنا لست مرحبا عالم" ؛
console.log (this.char) ؛
} ؛
إرجاع الإرجاع () ؛
}
بالطبع ، هذا المثال غير مناسب بما فيه الكفاية. لذلك ، نحتاج إلى مثال إضافي لشرح هذه المشكلة. فيما يلي مثال من "البرمجة المتقدمة JavaScript" لتوضيح هذه المشكلة.
نسخة الكود كما يلي:
var name = "The Window" ؛
var object = {
الاسم: "كائني" ،
getNameFunc: function () {
وظيفة الإرجاع () {
إرجاع هذا.
}
}
} ؛
Object.getNameFunc () () ()
ولكن هذا الاستخدام حقًا ، والحل هو توفير متغير مؤقت ، كما هو مذكور في المقالة السابقة "بعض المعرفة حول هذا في JavaScript".
نسخة الكود كما يلي:
var name = "The Window" ؛
var object = {
الاسم: "كائني" ،
getNameFunc: function () {
var that = هذا ؛
وظيفة الإرجاع () {
إرجاع ذلك.
}
}
} ؛
Object.getNameFunc () () ()
إغلاق JavaScript وقراءة وكتابة المتغيرات
تجدر الإشارة إلى أننا إذا لم نعالج متغيراتنا جيدًا ، فيمكننا أيضًا تعديلها.
نسخة الكود كما يلي:
وظيفة مرحبا () {
var char = "Hello ، World" ؛
يعود{
المجموعة: وظيفة (سلسلة) {
إرجاع char = سلسلة ؛
} ،
طباعة: وظيفة () {
console.log (char)
}
}
}
var says = hello () ؛
say.set ('New Hello ، World')
say.print () // New Hello World
إغلاق JavaScript والأداء
اقتباس MDC
نسخة الكود كما يلي:
إذا لم تكن عمليات الإغلاق مطلوبة لبعض المهام الخاصة ، فمن غير الحكمة إنشاء وظائف في وظائف أخرى دون الحاجة ، لأن الإغلاق لها تأثيرات سلبية على أداء البرنامج النصي ، بما في ذلك سرعة المعالجة واستهلاك الذاكرة.
ذكرت المقالة أيضا.
نسخة الكود كما يلي:
على سبيل المثال ، عند إنشاء كائن أو فئة جديدة ، يجب أن ترتبط الأساليب عادة بالنموذج الأولي للكائن بدلاً من تحديده في مُنشئ الكائن. والسبب هو أن هذا سيؤدي إلى إعادة تعيين الطريقة مرة واحدة في كل مرة يطلق عليها المُنشئ (أي ، لإنشاء كل كائن).