في JavaScript ، يتم استخدام VAR لإعلان المتغيرات ، ولكن هذا بناء الجملة غير مطلوب بشكل صارم. في كثير من الأحيان ، يمكننا استخدام متغير مباشرة دون استخدام VAR لإعلانه.
نسخة الكود كما يلي:
var x = "xx" ؛
y = "xxx" ؛
وهلم جرا. هناك مشكلة في هذا. على سبيل المثال ، في سطر في الكود ، أريد استخدام متغير معلن x. نتيجة لذلك ، نظرًا لكتابة الأخطاء أو الإملاء ، يتم كتابة هذا المتغير على أنه Y. والنتيجة تعادل إعلان "ضمني" لمتغير y. في البرمجة الفعلية ، يصعب في بعض الأحيان اكتشاف هذا الخطأ.
عندما تصدر هذا الإعلان "الضمني" في السياق الحالي ، سيبحث محرك JavaScript أولاً عما إذا كان قد تم الإعلان عن هذا المتغير من قبل في السياق الحالي. إذا لم يكن كذلك ، فابحث في المستوى السابق من السياق. إذا لم يتم العثور عليها ، فسيعلن أخيرًا هذا المتغير على النافذة!
على سبيل المثال:
الرمز كما يلي:
نافذة. y = "Hello" ؛ وظيفة func () {y = "أوه ، لا !!!" ؛ } func () ؛ تنبيه (window.y) ؛ //#=> عرض "أوه ، لا !!!"عندما يكون لأي طبقة في السياق تعريف "ضمني" للمتغير ، سيتم تعديل متغير تلك الطبقة دون إنشاء متغير جديد على النافذة. (هذا النوع من الأخطاء مزعج للغاية ، وخاصة الكود الأكثر تعقيدًا)
على سبيل المثال:
الرمز كما يلي:
var x = "window.x" ؛ الدالة A () {var x = "a's x" ؛ var b = function () {var c = function () {// no var! x = "c's x:" ؛ } ؛ تنبيه ("قبل تشغيل C ، BX:" + X) ؛ ج () ؛ تنبيه ("بعد تشغيل C ، BX:" + X) ؛ } ؛ التنبيه ("الفأس هو:" + x) ؛ ب () ؛ التنبيه ("بعد تشغيل وظيفة B ، الفأس هو:" + x) ؛ } ؛ تنبيه ("قبل التشغيل ، window.x:" + x) ؛ أ () ؛ تنبيه ("بعد تشغيل ، window.x:" + x) ؛هناك الطبقات التالية هنا: Window ، Func A ، Func B ، Func C متداخل دائمًا على مستويات. نافذة-> a-> b-> c
لا يتم تعريف كل من النافذة والمتغير x ، و b. يتم الإعلان عن X في C ، والذي يعدل في النهاية قيمة المتغير أ.
تذكر ، في JavaScript ، إعلان المتغيرات ، ويجب عليك إضافة VAR قبل ذلك.