هناك نوعان من المتغيرات في جافا سكريبت: المتغيرات المحلية والمتغيرات العالمية. بالطبع ، مقالتنا هي مساعدتك في التمييز بين هذين المتغيرين.
أولاً ، تشير المتغيرات المحلية إلى الوظائف التي لا يمكن استدعاؤها إلا ضمن وظيفة أعلنها هذا المتغير. متغير يمكن استدعاؤه في الكود بأكمله كمتغير عالمي. بالطبع ، ليس من الواضح بالتأكيد أن نفهم حرفيًا. سأقدمها بالتفصيل أدناه:
كما نعلم جميعًا ، يجب إعلان المتغيرات مع الكلمة الرئيسية VAR. ومع ذلك ، يمكن أيضًا استخدام المتغيرات ضمنيًا في JavaScript ، مما يعني أنها تستخدم مباشرة دون إعلان. علاوة على ذلك ، كن حذرًا من أن JavaScript يستخدم دائمًا المتغيرات المعلنة ضمنيًا كمتغيرات عالمية.
على سبيل المثال:
نسخة الكود كما يلي:
وظيفة myName () {
i = 'Yuanjianhang' ؛
}
myName () ؛
وظيفة sayname () {
تنبيه (ط) ؛
}
sayname () ؛
نتيجة الإخراج هي: Yuanjianhang
هذا يدل على أن المتغير أنا متغير عالمي. إذا تم تغيير الرمز أعلاه إلى ما يلي:
نسخة الكود كما يلي:
وظيفة myName () {
var i = 'Yuanjianhang' ؛
}
myName () ؛
وظيفة sayname () {
تنبيه (ط) ؛
}
sayname () ؛
في هذه المرحلة ، لن يكون للمتصفح أي نتيجة إخراج ، لأنني محدد في وظيفة myName ، لذلك فهو مجرد متغير محلي من myname ولا يمكن أن يطلق عليه خارجيا.
انظر الآن إلى الوراء في الكود التالي:
نسخة الكود كما يلي:
وظيفة myName () {
i = 'Yuanjianhang' ؛
}
myName () ؛
وظيفة sayname () {
تنبيه (ط) ؛
}
sayname () ؛
الآن ، دعنا نجري بعض التغييرات ونزيل myName () ؛ والرمز كما يلي:
نسخة الكود كما يلي:
وظيفة myName () {
i = 'Yuanjianhang' ؛
}
وظيفة sayname () {
تنبيه (ط) ؛
}
sayname () ؛
في هذا الوقت ، لن يتفاعل المتصفح كثيرًا. لأنه على الرغم من أنني متغير عالمي ، فإن الدالة myName () لا تسمى ، لذلك فهي تعادل ذلك على الرغم من أنني أعلني ، إلا أنها لا تُحدد أي قيمة لـ i ، لذلك لا يوجد إخراج.
وبالمثل ، إذا تم تغيير المثال أعلاه إلى:
نسخة الكود كما يلي:
وظيفة myName () {
i = 'Yuanjianhang' ؛
}
وظيفة sayname () {
تنبيه (ط) ؛
}
sayname () ؛
myName () ؛
في هذه الحالة ، لن يتم إخراج أي نتائج. عند تنفيذ رمز JavaScript ، سيتم التحقق من قيمة المتغير الذي يتم فحصه عند استدعاء وظيفة SayName (). في هذا الوقت ، لم يتم تنفيذ وظيفة myName بعد ، مما يعني أنه لم يتم تعيينه بعد ، لذلك لن يتم إخراج أي نتائج.
لتسهيل فهم الجميع بشكل أفضل ، إليك مثال آخر:
نسخة الكود كما يلي:
var i = 'Yuanjianhang' ؛
وظيفة mylovename () {
i = 'guanxi' ؛
}
mylovename () ؛
وظيفة myName () {
تنبيه (ط) ؛
}
myName () ؛
ما هي النتيجة هذه المرة؟
الجواب هو guanxi
بادئ ذي بدء ، فإن القيمة الأصلية لـ I هي Yuanjianhang ، ولكن بعد استدعاء وظيفة Mylovename () ، تم تغيير قيمة I إلى Guanxi ، وبالتالي فإن النتيجة النهائية هي Guanxi.
إذا قمت بتغيير الرمز إلى:
نسخة الكود كما يلي:
var i = 'Yuanjianhang' ؛
وظيفة mylovename () {
var i = 'guanxi' ؛
}
mylovename () ؛
وظيفة myName () {
تنبيه (ط) ؛
}
myName () ؛
النتيجة في هذا الوقت هي Yuanjianhang ، لأن الاثنين في الكود مختلفان ، والآخر عالمي والآخر محلي. يمكن أيضًا فهمه بهذه الطريقة. على الرغم من أن أسماء الاثنين متماثلين ، إلا أن جوهر هذين الشخصين يختلفان ، كما لو كان هناك شخصان يحملان نفس الاسم. على الرغم من أن الأسماء هي نفسها ، إلا أنها ليست نفس الشخص.
إذا قمت بتحويل الرمز إلى هذا:
نسخة الكود كما يلي:
var i = 'Yuanjianhang' ؛
وظيفة mylovename () {
i = 'guanxi' ؛
}
وظيفة myName () {
تنبيه (ط) ؛
}
myName () ؛
mylovename () ؛
أعتقد أن الجميع يمكنهم معرفة النتيجة بأنفسهم ، والنتيجة هي Yuanjianhang.
نظرًا لأنه يمكن استدعاء المتغيرات العالمية داخل الوظيفة ، ماذا عن الموقف التالي:
نسخة الكود كما يلي:
var i = 'Yuanjianhang' ؛
وظيفة mylovename () {
i = 'guanxi' ؛
تنبيه (ط) ؛
}
mylovename () ؛
ما هي القيمة المتغير في هذا الوقت؟
دعونا نحلل:
أولاً ، تم تعيين المتغير العالمي I على النحو التالي: Yuanjianhang.
تسمى وظيفة mylovename () التالية ، والمتغير العالمي الذي تم إعادة تعيينه لقيمة جديدة: Guanxi
وبالتالي فإن النتيجة هي بالتأكيد: guanxi.
ماذا لو أخذنا في حالة تأهب مقدما ، مثل هذا:
نسخة الكود كما يلي:
var i = 'Yuanjianhang' ؛
وظيفة mylovename () {
تنبيه (ط) ؛
i = 'guanxi' ؛
}
mylovename () ؛
ما هي النتيجة في هذا الوقت؟
النتائج التي تم التحقق منها هي: غير محددة
ماذا لو كان الرمز مثل هذا:
نسخة الكود كما يلي:
var i = 'Yuanjianhang' ؛
وظيفة mylovename () {
تنبيه (ط) ؛
}
mylovename () ؛
النتيجة في هذا الوقت هي: Yuanjianhang
لماذا يحدث الوضع غير المحدد أعلاه؟ لأن ترتيب تنفيذ الكود من أعلى إلى أسفل ، وليس هناك تعريف لـ I قبل إخراج i. لذلك ، من هذا يمكننا أن نرى أنه عند استخدام الكود ، يجب وضع إعلان المتغيرات أمام الكود لتجنب المشكلات المماثلة!
بصورة مماثلة:
نسخة الكود كما يلي:
var i = 'Yuanjianhang' ؛
وظيفة mylovename () {
تنبيه (ط) ؛
var i = 'guanxi' ؛
}
mylovename () ؛
في هذه الحالة ، سيتم إخراجها أيضًا: غير محدد
حسنًا ، ليس لدي سوى العديد من المقدمات حول المتغيرات ، وأعتقد أن أي شخص يمكنه فهمها. بغض النظر عن كيفية نسخ الكود ، لن يتغير جوهره.
ما سبق هو كل شيء عن هذا المقال. هل كان لديك فهم أعمق للفرق بين المتغيرات المحلية والمتغيرات العالمية في جافا سكريبت؟ أتمنى لك سنة جديدة سعيدة ودراسة سعيدة.