لقد قرأت وضع JavaScript الصارم عدة مرات ، ويقول البعض "تعطيل بالبيانات". في الماضي ، رأيت كل هذا من خلال ركوب الحصان ومشاهدة الزهور ، ومرتى ، لأنني نادراً ما أستخدم هذا البيان في الأوقات العادية ، لذلك لا علاقة له بنفسي. اليوم لا يسعني إلا أن أتساءل لماذا لا يستطيع "النموذج الصارم" تحمل البيان؟
تقول مواصفات ECMASCRIPT أنه "يتم استخدام العبارة مع تعيين نطاق الكود في كائن معين". يمكن ملاحظة أن البيان يغير سلسلة النطاق.
وظيفة الشخص (الاسم ، العمر ، الجنس) {this.name = name ؛ this.age = age ؛ this.sex = sex ؛} (function () {var title = 'supplant:' ؛ var Zhangsan = new شخص ('Zhang San' ، 20 ، 'male') ؛ var str = '' ؛ موقف '+Job ؛} console.log (str) ؛}) () ؛سيقوم الرمز أعلاه بالإبلاغ عن مرجع غير معروف: لم يتم تعريف الوظيفة.
إذا تم تغيير ما ورد أعلاه مع كتلة البيان إلى
str = title+Zhangsan.name+'، Age'+Zhangsan.age+'years ،'+Zhangsan.sex+'sex'+'، position'+Zhangsan.job ؛
لا يوجد خطأ ، والإخراج هو: مقدم الطلب: Zhang San ، 20 عامًا ، ذكر غير محدد
بالنسبة للمتغيرات في كتلة البيان ، عند التنفيذ ، يجب عليك التحقق مما إذا كانت خصائصها في Zhangsan.
نحن نعلم أنه عند تشغيل البرنامج النصي ، هناك عمليتان مطلوبان ، وترجم أولاً ثم تنفذ.
من الواضح ، عند التجميع ، لا يمكن تحديد خصائص الكائن الذي يمثله هذا المتغير من Zhangsan. لا يمكن تحديد أن Zhangsan هو مثال للشخص عند تنفيذها. لذلك ، لا يمكن أن يكون صحيحًا أن المتغير في كتلة البيان هو خاصية Zhangsan أو متغير في سلسلة النطاق المتغير السابقة أثناء التجميع.
يتنافس هذا مع حقيقة أن المتغير يتم تعريفه عند تجميع الوضع الصارم ، وبالتالي فإن الوضع الصارم لا يسمح بالاختلاف. لذلك ، ليس من الصعب فهم أن البيان مع تعطيل في الوضع الصارم.