النطاق هو واحد من أهم مفاهيم JavaScript. إذا كنت ترغب في تعلم JavaScript جيدًا ، فأنت بحاجة إلى فهم مبادئ العمل في نطاق JavaScript وسلسلة النطاق. تقدم مقالة اليوم شرحًا مفصلاً لأمثلة نطاق JavaScript ، على أمل مساعدة الجميع على تعلم JavaScript بشكل أفضل.
أي لغة برمجة لديها مفهوم النطاق. ببساطة ، النطاق هو النطاق الذي يمكن الوصول إليه للمتغيرات والوظائف ، أي النطاق يتحكم في رؤية وحيات الحياة للمتغيرات والوظائف. في JavaScript ، يكون نطاق المتغيرات عالميًا ومحليًا.
1. لا يوجد نطاق على مستوى الكتلة في جافا سكريبت
يوجد نطاق على مستوى الكتلة في Java أو C#، أي أن الأقواس هي أيضًا نطاق.
public static void main () {if (1 == 1) {string name = "seven" ؛} system.out.println (name) ؛} // الإبلاغلا يوجد نطاق على مستوى الكتلة في JavaScript
الدالة الرئيسية () {if (1 == 1) {var name = 'Seven' ؛} console.log (name) ؛} // الإخراج: سبعة2. JavaScript يعتمد نطاق الوظيفة
في JavaScript ، تعمل كل وظيفة كنطاق ، ولا يمكن الوصول إلى المتغيرات في النطاق الداخلي خارجيًا.
الوظيفة الرئيسية () {var innervalue = 'seven' ؛} main () ؛ console.log (innervalue) ؛ // error: unitical reference referror: innervalue غير محدد3. سلسلة نطاق JavaScript
نظرًا لأن كل وظيفة في JavaScript هي نطاق ، إذا ظهرت وظيفة متداخلة ، ستظهر سلسلة نطاق.
Xo = 'Alex' ؛ function func () {var xo = "seven" ؛ function inner () {var xo = 'alvin' ؛ console.log (xo) ؛} inner () ؛} func () ؛على سبيل المثال ، يظهر الرمز أعلاه في سلسلة النطاق المكونة من ثلاثة نطاقات. إذا ظهرت سلسلة النطاق ، سيظهر الطلب عند البحث عن المتغيرات. للمثال أعلاه:
عند تنفيذ Console.log (XO) ، فإن ترتيب البحث الخاص به هو البحث من الداخل إلى الخارج وفقًا لأولوية سلسلة النطاق. إذا لم تكن الطبقة الداخلية غير موجودة ، فستبحث تدريجياً حتى لا يتم العثور على استثناء.
4. تم إنشاء سلسلة نطاق JavaScript قبل التنفيذ
تم إنشاء نطاق JavaScript قبل تنفيذه. عندما يتم تنفيذها في المستقبل ، تحتاج فقط إلى البحث وفقًا لسلسلة النطاق.
مثال 1:
XO = 'Alex' ؛ funct func () {var xo = "seven" ؛ function inner () {console.log (xo) ؛} إرجاع داخلي ؛} var ret = func () ؛ ret () ؛ // النتيجة:الكود أعلاه موجود بالفعل قبل أن تسمى الوظيفة:
• النطاق العالمي-> نطاق وظيفة FUNC-> نطاق الوظيفة الداخلية
عند تنفيذ [ret () ؛] ، لأنه يشير إلى الوظيفة الداخلية ، تم تعريف سلسلة النطاق لهذه الوظيفة على أنها: نطاق وظيفة Global -> نطاق وظيفة FUNC -> نطاق الوظيفة الداخلية ، لذلك عند تنفيذ [RET () ؛] ، سيتم العثور على المتغيرات بناءً على سلسلة النطاق الحالية.
مثال 2:
XO = 'Alex' ؛ function func () {var xo = "eirc" ؛ function inner () {console.log (xo) ؛} xo = 'seven' ؛ return inner ؛} var ret = func () ؛ ret () ؛الرمز أعلاه له نفس الغرض من المثال 1 ، ويؤكد أيضًا أن سلسلة النطاق موجودة بالفعل قبل أن تسمى الوظيفة:
• النطاق العالمي-> نطاق وظيفة FUNC-> نطاق الوظيفة الداخلية
بشكل مختلف ، عند تنفيذ [var ret = func () ؛] ، تمت إعادة ضبط قيمة متغير XO في نطاق func إلى "سبعة" من "eric" ، لذلك عند تنفيذ [ret () ؛] لاحقًا ، يمكنك العثور على "سبعة" فقط.
مثال 3:
XO = 'Alex' ؛ <br> شريط الدالة () {console.log (xo) ؛} وظيفة func () {var xo = "seven" ؛ return bar ؛} var ret = func () ؛ ret () ؛في الكود أعلاه ، تم إنشاء سلاسل نطاقين قبل تنفيذ الوظيفة:
• النطاق العالمي-> نطاق وظيفة البار
• النطاق العالمي-> نطاق وظائف FUNC
عند تنفيذ [RET () ؛] ، يشير RET إلى وظيفة الشريط ، وسلسلة النطاق لوظيفة الشريط موجودة بالفعل: نطاق وظيفة النطاق العالمي -> عند التنفيذ ، سيتم البحث عنها استنادًا إلى سلسلة النطاق الحالية.
5. بيان مقدما
إذا لم تنشئ متغيرات واستخدمتها مباشرة في JavaScript ، فسيتم الإبلاغ عن خطأ:
console.log (xxoo) ؛ // error: uncaughter referenceerror: xxoo غير محدد
في JavaScript ، إذا تم إنشاء قيمة دون تعيين قيمة ، فإن القيمة غير محددة ، مثل:
var xxoo ؛ console.log (xxoo) ؛ // الإخراج: غير محدد
إذا تم كتابة هذا في الوظيفة:
الدالة foo () {console.log (xo) ؛ var xo = 'seven' ؛} foo () ؛ // الإخراج: غير محددالرمز أعلاه لا يبلغ عن خطأ ولكنه يخرج غير محدد. والسبب هو أنه قبل تنفيذ وظائف JavaScript ، سوف تعلن جميع المتغيرات فيها دون تعيين قيم. لذلك ، فإنه يعادل المثال أعلاه أن الوظيفة قد نفذت بالفعل var xo عندما "مسبقة" ؛ وبالتالي فإن إخراج الكود أعلاه غير محدد.
ما سبق هو شرح مفصل لعينة نطاق JavaScript التي أدخلها المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!