قبل التعرف على النطاق المتغير في JavaScript، يجب علينا توضيح بعض النقاط:
• يعتمد النطاق المتغير لجافا سكريبت على سلسلة النطاق الفريدة الخاصة به.
• لا يحتوي JavaScript على نطاق على مستوى الكتلة.
•يتم تعريف المتغيرات المعلنة في الدالة في جميع أنحاء الدالة.
1. سلسلة نطاق جافا سكريبت
انظر أولاً إلى الكود التالي:
انسخ رمز الكود كما يلي:
<script type="text/javascript"> varrain = 1; functionrainman(){ var man = 2; } Rainman(); // استدعاء وظيفة Rainman</script>
مراقبة تنبيه الكود (المطر)؛. تتحقق JavaScript أولاً مما إذا كان متغير المطر محددًا في الوظيفة الداخلية، وإذا تم تعريفه، فسيتم استخدام متغير المطر في الوظيفة الداخلية تم تعريفه في وظيفة Rainman. في هذا الكود، لم يتم تعريف متغير Rain في نص وظيفة Rainman، لذلك سيستمر محرك JavaScript في البحث عن (الكائن العام) لمعرفة ما إذا كان المطر محددًا في الكائن العام أم لا المطر المحدد = 1، وبالتالي فإن النتيجة النهائية سوف تظهر '1'.
سلسلة النطاق: عندما تحتاج JavaScript إلى الاستعلام عن متغير x، فسوف تبحث أولاً عن الكائن الأول في سلسلة النطاق. إذا لم يحدد الكائن الأول، إذا لم يكن هناك تعريف، فسيستمر البحث، وهكذا.
يتضمن الكود أعلاه ثلاثة كائنات سلسلة النطاق، بالترتيب: الداخلي، وRainman، والنافذة.
2. داخل جسم الوظيفة، تتمتع المتغيرات المحلية بأولوية أعلى من المتغيرات العامة التي تحمل نفس الاسم.
انسخ رمز الكود كما يلي:
<script type="text/javascript"> varrain = 1; // تحديد دالة المطر المتغيرة (){ varrain = 100; // تحديد المتغير المحلي تنبيه( Rain ); هنا } check (); تنبيه (مطر ); //1 سوف ينبثق هنا</script>
3. لا تحتوي JavaScript على نطاق على مستوى الكتلة.
وهذا أيضًا هو الجزء الذي تكون فيه JavaScript أكثر مرونة من اللغات الأخرى.
لاحظ الكود أدناه بعناية، ستجد أن نطاقات المتغيرات i وj وk هي نفسها، وهي عامة في جسم دالة المطر بالكامل.
انسخ رمز الكود كما يلي:
<script type="text/javascript"> functionrainman(){ // هناك ثلاثة متغيرات محلية ijk في نص دالة Rainman var i = 0; k < 3; k++) { تنبيه ( k ); // انبثاق 0 1 2 على التوالي } تنبيه ( k );
4. يتم تعريف المتغيرات المعلنة في الوظيفة في جميع أنحاء الوظيفة.
لاحظ أولاً هذا الكود:
انسخ رمز الكود كما يلي:
<script type="text/javascript"> functionrain(){ var x = 1; function man(){ x = 100; man(); } Rain(); // استدعاء المطر</script>
يوضح الكود أعلاه أنه يمكن استخدام المتغير x في جميع أنحاء جسم وظيفة المطر ويمكن إعادة تعيينه. بسبب هذه القاعدة، سيتم إنتاج نتائج "لا تصدق"، لاحظ الكود أدناه.
انسخ رمز الكود كما يلي:
<script type="text/javascript"> var x = 1; functionrain(){ تنبيه( x ); /pop 'رجل المطر' } Rain();</script>
وذلك لأن المتغير المحلي x في دالة المطر محدد في جميع أنحاء جسم الدالة (var x= 'rain-man'، مُعلن)، لذا فإن المتغير العام x الذي يحمل نفس الاسم مخفي في جسم دالة المطر بأكمله. السبب وراء ظهور "غير محدد" هنا هو أنه عند تنفيذ التنبيه (x) لأول مرة، لم تتم تهيئة المتغير المحلي x بعد.
وبالتالي فإن وظيفة المطر أعلاه تعادل الوظيفة التالية:
انسخ رمز الكود كما يلي:
وظيفة المطر () {var x تنبيه (x x = 'rain-man'؛}
5. المتغيرات المحددة دون استخدام الكلمة الأساسية var هي متغيرات عامة.
انسخ رمز الكود كما يلي:
<script type="text/javascript"> functionrain(){ x = 100; // تم الإعلان عن المتغير العام x وتعيينه}rain();
يعد هذا أيضًا خطأ شائعًا بين مبتدئي JavaScript، حيث يتم ترك العديد من المتغيرات العامة دون قصد.
6. المتغيرات العامة كلها خصائص لكائن النافذة.
انسخ رمز الكود كما يلي:
<script type="text/javascript"> var x = 100; تنبيه( window.x);// المنبثقة 100 تنبيه(x);</script>
أي ما يعادل الكود التالي
انسخ رمز الكود كما يلي:
<script type="text/javascript"> window.x = 100; تنبيه( window.x );