1. يتم استخدام المتغيرات المحلية أولاً ثم الإعلان عنها، وهذا لا يؤثر على المتغيرات الخارجية التي تحمل نفس الاسم.
انسخ رمز الكود كما يلي:
var x = 1; // --> المتغير الخارجي x
وظيفة الجبهة الوطنية () {
تنبيه (x)؛ // -> يتم استخدام المتغير المحلي غير المحدد x أولاً
var x = 2; // الإعلان والتعيين لاحقًا
}
الجبهة الوطنية ()؛
تنبيه (x)؛ // --> 1<BR>
النقطة الأولى هي أن الجملة الأولى في الدالة fn تُخرج x، ويتم تعريف x في الجملة الثانية. هذا مسموح به في JS، والمسموح به هنا يعني أنه يمكن تشغيل البرنامج دون أخطاء في بناء الجملة.
لكن هذا غير مسموح به في لغات أخرى مثل C وJava. يجب الإعلان عن المتغيرات قبل الاستخدام، مثل
انسخ رمز الكود كما يلي:
اختبار الطبقة العامة {
public static void main(String[] args) {
System.out.println(x);//استخدم أولاً
int x = 10; // نشر الإعلان
}
}
في Java، سيظهر المترجم خطأ ولا يمكن تشغيل البرنامج.
النقطة الثانية هي أن المتغير المحلي x داخل الدالة fn لن يؤثر على المتغير الخارجي x. أي أن مخرجات التنبيه في fn ليست 1، ولكنها غير محددة.
ثانيًا، تتمتع المعلمات الرسمية بأولوية أعلى من أسماء الوظائف.
انسخ رمز الكود كما يلي:
وظيفة الجبهة الوطنية (الجبهة الوطنية) {
تنبيه (الجبهة الوطنية)؛
}
الجبهة الوطنية('مرحبا'); // --> "مرحبا"
يمكنك أن ترى أن اسم الوظيفة والمعلمة الرسمية لهما نفس اسم fn، والإخراج هو السلسلة "hello"، ولكن ليس نص الوظيفة (fn.toString()) للدالة fn.
ثالثًا، تتمتع المعلمات الرسمية بأولوية أعلى من الحجج.
انسخ رمز الكود كما يلي:
وظيفة الجبهة الوطنية (الوسائط) {
تنبيه (الوسائط)؛
}
fn('hello'); // --> "مرحبًا"<BR>
يمكن استخدام كائن الوسيطات مباشرة داخل الوظيفة وهو معرف خاص توفره اللغة نفسها.
يحدث هنا أن يتم الإعلان عن المعلمة الرسمية بنفس الاسم. يمكنك أن ترى أن الإخراج هو "مرحبًا" بدلاً من "[كائن كائن]"، أي أن وسيطات المعلمات الرسمية تغطي الوسائط الحقيقية التي توفرها اللغة نفسها.
4. المعلمات الرسمية لها أولوية أعلى من المتغيرات المحلية التي تم الإعلان عنها ولكن لم يتم تعيينها.
انسخ رمز الكود كما يلي:
وظيفة الجبهة الوطنية (أ) {
فار أ ؛
تنبيه (أ)؛
}
الجبهة الوطنية('مرحبا'); // --> "مرحبا"
المعلمة الرسمية للدالة fn هي الجملة الأولى في الدالة تعلن فقط عن المتغير المحلي a، ولكنها لا تقوم بتعيين قيمة. من حقيقة أن نتيجة الإخراج هي "hello" بدلاً من غير محددة، يمكن ملاحظة أن المعلمة الرسمية a لها أولوية أعلى من المتغير المحلي a الذي تم الإعلان عنه فقط ولكن لم يتم تعيين قيمة له.
5. المتغيرات المحلية المعلنة والمخصصة لها أولوية أعلى من المعلمات الرسمية.
انسخ رمز الكود كما يلي:
وظيفة الجبهة الوطنية (أ) {
فار أ = 1؛
تنبيه (أ)؛
}
الجبهة الوطنية('مرحبا'); // --> "1"
المعلمة الرسمية للدالة fn هي الجملة الأولى في الدالة تعلن فقط عن المتغير المحلي a وتعين له القيمة 1. من نتيجة الإخراج هي "1" بدلاً من "hello"، يمكننا أن نرى أن المتغير المحلي المعلن والمخصص a له أولوية أعلى من المعلمة الرسمية a.
6. عندما يتم تعيين المعلمات الرسمية للمتغيرات المحلية بنفس الاسم
انسخ رمز الكود كما يلي:
وظيفة الجبهة الوطنية (أ) {
فار أ = أ؛
تنبيه (أ)؛
}
الجبهة الوطنية('مرحبا');
لا تقم بتشغيله بعد، خمن النتيجة. إذا اتبعت النقطة 5: المتغيرات المحلية المعلنة والمخصصة لها أولوية أعلى من المعلمات الرسمية. ثم سوف يكون غير محدد. ولكن في الواقع a هو "hello"، أي أن اليمين a هو المعلمة الرسمية a، واليسار a هو المتغير المحلي a.
والاثنان هنا لا يتداخلان مع بعضهما البعض، ولا يغطي أحدهما الآخر. وهذا يتناقض مع ما قلته للتو: المتغيرات المحلية المعينة لها أولوية أعلى من المعلمات الرسمية. لكن المحرك يفعل ما نريده، لأننا لا نريد أن يكون a غير محدد بعد var a = a.