في ديسمبر 2009 ، أصدرت ECMASCRIPT ECMASCIPT 5 ، والتي تم إصدارها للإصدار الأخير من معيار ECMASCRIPT 3 للإصدار السابق. تعقيد هذه اللغة (أي ، سواء كان ذلك لزيادة عدد كبير من الخصائص لتوسيع وظيفة ECMASCRIPT) وتوفي ، مما يجعل صياغة معايير ECMASCRIPT جديدة تتخلف بشكل كبير عن البرمجة. Ecmascript 5 ليس طموحًا من حيث الأهداف. في هذا الوضع ، أصبح بناء جملة ECMASCRIPT أكثر صرامة ، مما يجعل العديد من الكود السهل -السهل -غير مسموح به ، بما في ذلك الإعلانات المتغيرة الإلزامية وغير المطلقة بالبيانات. هذا الوضع بسيط للغاية.
علمت لاحقًا أنه في عام 2010 ، كتبت أيضًا مقالًا قصيرًا لمناقشة عيوب الكلمات الرئيسية ، مع ما يلي.
إسفين
منذ وقت طويل ، سميت مسقط رأس مسقط رأس الله ما ليانغ باسم اسمه. لم يستقيل ما ليانغ ، لكنه صنع أربع كلمات. بعد سنوات عديدة ، جاء أجنبي إلى هنا وأوقف شخصًا محليًا على هذا الطريق.
هل هذا طريق شينما؟
نعم ، هذا هو طريق شينما.
ألا تعرف أيضًا؟
أنا هذا الشخص ، كيف لا أعرف.
هل هذا طريق شينما؟
أنت تعرف ما تسأل.
أنا فقط لا أعرف أن هذا هو طريق شينما.
ألم أخبرك أن هذا طريق شينما؟
هل يمكنك قول ذلك مرة أخرى؟
Nympho
بعد ذلك ، تذكر السكان المحليون آراء ما ليانغ في ذلك العام ، وأدركوا فجأة. ما يتحدث عنه ما ليانغ -لا تستخدم الاختصار.
سؤال
يوم واحد إلى Wang Er ، صديقه الصيني ، "لدي حلم. أريد أن أظهر نفسي على CCTV." متجر CCTV.
والسؤال هو عندما قال توم حلمه ، هو
أ) طموح ب) ليس طموحًا ج) غامض د)
اليمين angr هو ب) و ج).
نص
أوضح مثالان أعلاه على الصين والدول الأجنبية القديمة والحديثة أن الانعكاس يسبب في بعض الأحيان الغموض. هذا موجود أيضا في جافا سكريبت. في بعض الأحيان يكون من المقلق للغاية تجديد متغير طويل ، مثل ::
ObjectWithLongName1.propty1 = value1 ؛
ObjectWithLongName1.propty2 = value2 ؛
ObjectWithLongName1.propty3 = value3 ؛
ObjectWithLongName1.method1 () ؛
لكن الاسم الواضح مهم للغاية لقراءة البرنامج. لذلك يوفر JavaScript البيان. يمكن إعادة كتابة المثال أعلاه:
نسخ رمز رمز على النحو التالي:
مع (ObjectWithLongName1) {{
profty1 = value1 ؛
propy2 = value2 ؛
propy3 = value3 ؛
الطريقة 1 () ؛
}
هذا يوفر الكثير من الكونغ فو على لوحة المفاتيح ، ويصبح بنية البرنامج أكثر وضوحًا. لكن هذا الاختصار يقدم الغموض. تتمثل قواعد التحليل في JavaScript في العثور على سمات هذه الأسماء على ObjectWithLongName1 أولاً. هذا ما يفسره الرمز:
نسخ رمز رمز على النحو التالي:
if (ObjectWithLongName1.Property1! == undefined) {
if (ObjectWithLongName1.value1! == undefined) {
ObjectWithLongName1.Property1 = ObjectWithLongName1.value1 ؛
} آخر {
ObjectWithLongName1.Property1 = value1 ؛
}
} آخر {
if (ObjectWithLongName1.value1! == undefined) {
property1 = ObjectWithLongName1.value1 ؛
} آخر {
Property1 = value1 ؛
}
}
ما نريده هو أحد هذه الاحتمالات الأربعة ، ولكن إذا لم تكن حذراً ، فسيقوم البرنامج بتنفيذ احتمال آخر. علاوة على ذلك ، من الصعب للغاية حل طريقة الكتابة هذه. من ناحية أخرى ، يؤثر عدم اليقين هذا أيضًا على أداء لغة مترجم JavaScript.
في الواقع ، طالما أنه يمكن إزالة تحسن بسيط ، يمكن إزالة هذه العيوب. يمكننا إضافة رقم نقطة قبل سمات الكائن ، بحيث يكون هناك تمييز بديهي بين السمات والمتغيرات الخارجية ، وهناك العديد من اللغات الأخرى التي تفعل ذلك. ستصبح أمثلةنا الأولية هكذا:
نسخ رمز رمز على النحو التالي:
مع (ObjectWithLongName1) {{
.propty1 = value1 ؛
.propty2 = value2 ؛
.propty3 = value3 ؛
.method1 () ؛
}
قبل أن تقوم JavaScript بمثل هذه التحسينات ، تكون القوة الضارة خفيفة ، ويجب أن نحاول تجنب استخدام العبارة مع قدر الإمكان. لا يزال بإمكاننا تبني بعض أساليب التغيير.
نسخ رمز رمز على النحو التالي:
var O1 = ObjectWithLongName1 ؛
O1.prpty1 = value1 ؛
O1.prpty2 = value2 ؛
O1.prpty3 = value3 ؛
O1.Method1 () ؛
أو لهذا الموقف:
ObjectWithLongName1.propty1 = ObjectWithLongName2.Propty1 ؛
ObjectWithLongName1.propty2 = ObjectWithLongName2.Propty2 ؛
Nympho
ObjectWithLongName1.propty10 = ObjectWithLongName2.Propty10 ؛
يمكن كتابتها على النحو التالي:
نسخ رمز رمز على النحو التالي:
(وظيفة (O1 ، O2 ، PL) {
pl.foreach (function (it) {o1 [item] = o2 [item] ؛}) ؛
}) (ObjectWithLongName1 ، ObjectWithLongName2 ، ['propty1' ، 'profty2' ، ... ، 'profty10')) ؛