اليوم ، سألني متدرب صغير في الشركة عن الفرق بين رموز JS:
الرمز 1:
<script type = "text/javaScript"> var a = "hello" ؛ وظيفة اختبار () {var a ؛ تنبيه (أ) ؛ أ = "العالم" ؛ تنبيه (أ) ؛ } </script>الرمز 2:
<script type = "text/javaScript"> var a = "hello" ؛ وظيفة test () {Alert (a) ؛ أ = "العالم" ؛ تنبيه (أ) ؛ } </script>أعتقد ، الأمر بسيط للغاية. أليست مجرد مشكلة نطاق بين المتغيرات العالمية والمتغيرات المحلية؟ قلت: "عندما يتم تكرار المتغير العالمي مع المتغير المحلي ، فإن نطاق المتغير المحلي سوف يكتب فوق نطاق المتغير العالمي. بعد مغادرة نطاق المتغير المحلي ، ستعود إلى نطاق المتغير العالمي. وبالتالي فإن نتائج الرموز التي تعمل: 1) العالم غير المحدد 2).
<script> var a = 1 ؛ وظيفة test () {Alert (a) ؛ var a = 2 ؛ تنبيه (أ) ؛ } امتحان()؛ تنبيه (أ) ؛ </script>ما هي النتيجة متساوية؟ هل هو الإخراج 1 2 1؟ حسنًا ، اعتقدت ذلك قبل أن أرسلت قضية الاختبار إليها ، لكن بعد إخراج الاختبار ... كانت نتيجة الجري غير محددة 2 1. في ذلك الوقت ، كنت في حيرة وسألت المعلم غو أنني أدركت أنني لم أكن أعرف الكثير عن JS ، لذلك عملت بجد لتعلم + اختبار ، وتلخيصها على النحو التالي:
1. يتم تقسيم نطاق متغيرات JavaScript وفقًا لكتل الطريقة (أي ، يتم تقسيمه بواسطة زوج من الدعامة {} من الوظيفة). تذكر ، إنها كتلة وظائف ، وللحين ، وإذا كانت الكتل ليست معايير تقسيم النطاق. يمكنك إلقاء نظرة على الأمثلة التالية:
<script> وظيفة test2 () {Alert ("قبل للنطاق:"+i) ؛ // لم يتم تعيين قيمة (ليست غير معلمة! استخدم المتغيرات أو الوظائف غير المعلنة لرمي خطأ فادح وتنفيذ البرنامج النصي) // في هذا الوقت ، يتم نقص قيمة I Unived for (var i = 0 ؛ i <3 ؛ i ++) {Alert ("في SCOPE:"+i) ؛ // أنا 0 ، 1 ، 2 ، وعندما أكون 3 ، يتم قفز الحلقة} ("بعد النطاق:"+i) ؛ // أنا 3 ، لاحظ أنه بالفعل خارج النطاق ، لكنني ما زلت أحتفظ به كـ 3 بينما (صحيح) {var j = 1 ؛ استراحة؛ } تنبيه (j) ؛ // j هو 1 ، لاحظ أنه قيد التشغيل بالفعل أثناء النطاق الخارجي ، تظل قيمة J عند 1 إذا (صحيح) {var k = 1 ؛ } تنبيه (k) ؛ . تنبيه (ط) ؛ //خطأ! هذا صحيح ، إنه خطأ ، لأنه لم يتم الإعلان عن المتغير I (غير غير معروف ، يميز إخراج السطر الأول من وظيفة Test2) ، مما يؤدي إلى خطأ في البرنامج النصي ، وينتهي البرنامج هنا! تنبيه ("هل سيظل هذا الخط يخرج؟") ؛ // لم ينفذ تنبيه (J) ؛ // لم ينفذ تنبيه (K) ؛ // لم ينفذ </script>2. قبل التنفيذ ، ستقوم JavaScript بإجراء تحليل كامل للجزء الإعلاني من ملف البرنامج النصي بالكامل (بما في ذلك المتغيرات المحلية) لتحديد نطاق المتغيرات الفعلية. كيف تفهم؟ انظر المثال التالي:
<script> var a = 1 ؛ وظيفة test () {Alert (a) ؛ // A غير محدد! هذا A ليس متغيرًا عالميًا ، لأنه تم الإعلان عن متغير محلي مكرر في نطاق الوظيفة (السطر الأخير الرابع لجسم الوظيفة) و // يتم كتابة المتغير العالمي A ، مما يدل على أن JavaScript ستجري تحليلًا كاملًا لجزء تعريف ملف البرنامج النصي بالكامل قبل التنفيذ. لذلك ، قبل تنفيذ اختبار الوظيفة () ، // المتغير A في جسم الوظيفة ، يُشار إلى المتغير المحلي الداخلي بدلاً من المتغير العالمي الخارجي. ولكن في هذا الوقت ، تم الإعلان عن A فقط ولم يتم تعيين قيمة ، لذلك يخرج غير محدد. A = 4 تنبيه (أ) ؛ // A هو 4 ، هل لا يوجد تشويق؟ لا يزال A هنا متغيرًا محليًا! var a ؛ // المتغير المحلي A يعلن التنبيه (A) ؛ // A لا يزال 4 ، لأنه تم تعيين 4 لاختبار قبل} ؛ تنبيه (أ) ؛ // A هو 1 ، وهو ليس في نطاق الوظيفة ، قيمة A هي قيمة المتغير العالمي </script>3. عندما يتم تكرار المتغير العالمي مع المتغير المحلي ، فإن نطاق المتغير المحلي سيقوم بالكتابة فوق نطاق المتغير العالمي. بعد مغادرة نطاق المتغير المحلي ، يعود إلى نطاق المتغير العالمي. عندما يواجه المتغير العالمي متغيرًا محليًا ، كيفية استخدام المتغير العالمي؟ استخدم window.globalvariablename.
<script> var a = 1 ؛ وظيفة test () {Alert (window.a) ؛ // A هو 1 ، هنا A هو متغير عالمي! var a = 2 ؛ // يتم تعريف المتغير المحلي A في تنبيه الخط (A) ؛ // A هو 2 ، وهنا هو متغير محلي! } امتحان()؛ تنبيه (أ) ؛ // A هو 1 ، ليس في نطاق الوظيفة ، قيمة A هي قيمة المتغير العالمي </script>بالطبع ، لمزيد من المقالات ، يرجى الرجوع إلى المقالات ذات الصلة أدناه.