نطاق متغيرات الوظائف في JavaScript - المتغيرات العالمية والمحلية. نطاق متغيرات جافا سكريبت المتغيرات المحلية والعالمية

بيت / تثبيت البرامج

جميع المتغيرات والوظائف العامة هي في الواقع خصائص وأساليب لكائن خاص يسمى كائن عالمي.

الكائن العام هو كائن عادي يتم إنشاؤه تلقائيًا عند بدء تشغيل المترجم.

في JavaScript، يتم لعب دور الكائن العام بواسطة كائن Window. يحتوي هذا الكائن على خاصية نافذة تشير إلى كائن النافذة نفسه. يعد كائن Window كائنًا عالميًا ويحتوي بالإضافة إلى ذلك على عدد من خصائصه وأساليبه الخاصة للعمل مع نافذة المتصفح.

في رمز البرنامجيمكن أيضًا الإشارة إلى كائن عمومي ذي المستوى الأعلى باستخدام الكلمة الأساسية هذه:

تنبيه (هذا === نافذة)؛ // حقيقي

نظرًا لأن المتغيرات العامة هي خصائص كائن عالمي، فعند العمل مع متغير عام، فإننا نعمل فعليًا مع خصائص window:

فار نوم = 10؛ تنبيه (window.num)؛ // 10

بدلاً من الإعلان عن متغير باستخدام الكلمة الأساسية var، يمكنك إنشاء متغير عن طريق تحديد خاصية جديدة لكائن Window بشكل صريح:

Window.num = 10; تنبيه (رقم)؛ // 10

لاحظ أنه على الرغم من أن المتغيرات العامة هي في الواقع خصائص لكائن Window، إلا أنه ليس من الضروري إضافة بادئة لاسم المتغير:

فار نوم = 10؛ تنبيه (رقم)؛ // 10 تنبيه (window.num)؛ // 10. نفس تنبيه (رقم)؛

إذا تم الإعلان عن متغير عام باستخدام الكلمة الأساسية var أو Let، فسيتم إنشاء خاصية غير قابلة للتكوين، أي خاصية لا يمكن حذفها باستخدام عامل الحذف:

فار نوم = 10؛ تنبيه (حذف الرقم)؛ // خطأ، لا يتم حذف المتغير

إذا قمت بتعيين قيمة لمتغير غير معلن، فسيقوم مترجم JavaScript تلقائيًا بإنشاء متغير عام. تصبح المتغيرات التي تم إنشاؤها بهذه الطريقة خصائص عادية ومخصصة للكائن العام، أي يمكن حذفها باستخدام عامل الحذف:

الأعداد = 10؛ تنبيه (حذف الرقم)؛ // صحيح، تم حذف المتغير

طُرق وصف الطريقة
فك كودURI()تقوم بإرجاع سلسلة تحتوي على URI الذي تم فك ترميزه.
فك كودURIComponent()تقوم بإرجاع سلسلة تحتوي على الجزء الذي تم فك تشفيره من URI.
ترميزURI()تقوم بإرجاع سلسلة تحتوي على URI المشفر.
ترميزURIComponent()تقوم بإرجاع سلسلة تحتوي على الجزء المشفر من URI.
تقييم ()تقوم الدالة eval() بتنفيذ التعليمات البرمجية التي تم تمريرها إليها كسلسلة. يتم تنفيذ التعليمات البرمجية التي تم تمريرها إلى دالة في النطاق الذي تم استدعاء الوظيفة فيه.
غير محدود ()تحويل الوسيطة إلى رقم (إذا لزم الأمر) وإرجاع صحيح إذا كانت الوسيطة تحتوي على أي قيمة بخلاف NaN، واللانهاية الموجبة، واللانهاية السالبة. في هذه الحالات الثلاث يعود خطأ.
isNaN()يحدد ما إذا كانت الوسيطة التي تم تمريرها هي NaN أم لا.
تحليل عائم ()يوزع وسيطة سلسلة ويعيد رقم الفاصلة العائمة أو NaN.
بارسينت ()يوزع وسيطة سلسلة ويعيد عددًا صحيحًا أو NaN.

يوم جيد، عشاق جافا سكريبت والمشتركين الأوفياء. في مقال اليوم، سأخبرك بالتفصيل عن كيفية إنشاء المتغيرات العالمية والمحلية في JavaScript. سأقوم بالتأكيد بتعريف المصطلحات المهمة، والتحدث عن ميزات الإعلان عن المتغيرات وتهيئتها، ووصف ما هو النطاق وكيف تعمل العناصر التي تم إنشاؤها فيه.

كل هذا ينطبق على المعرفة الأساسية الأساسية للغة. بدون فهم كل هذا، لن تتمكن من المضي قدمًا وتطوير مهاراتك في برمجة JavaScript. بالإضافة إلى ذلك، ستكون المفاهيم الأساسية مفيدة لك ليس فقط في هذا التخصص، ولكن أيضًا في مجال تكنولوجيا المعلومات بشكل عام. حسنا، دعونا نبدأ!

ما هو المتغير وكيف يتم إنشاؤه؟

المتغير هو أحد عناصر لغة البرمجة التي يتم تخصيص منطقة ذاكرة لها ويتم تخزين قيم معينة فيها.

من الممكن أن يكون هناك عدد كبير من المتغيرات ويجب أن يكون لكل منها اسم فريد.

هناك نوعان من المتغيرات: العالمية والمحلية. الفرق بينهما يكمن فقط في نطاق المتغيرات المختلفة. وبالتالي، تكون العناصر العامة مرئية في جميع أنحاء الكود بأكمله، وتكون العناصر المحلية مرئية فقط في المنطقة الصغيرة التي تم الإعلان عنها فيها.

بالمناسبة، حاول منذ اليوم الأول، من الكود الأول، تسمية العناصر بأسماء منطقية ومفهومة. لأنه في وقت لاحق، عندما تعمل مع برامج ثقيلة، بعد فترة من الوقت، لن تتذكر ما يعنيه، على سبيل المثال، "aa1" أو "perem3".

ولا شيء واضح على الإطلاق من العنوان! هذا ليس سيئًا للغاية، ففي نهاية المطاف، ليس من الصعب جدًا فهم كتاباتك. ماذا ستفعل إذا تم تكليفك بمهمة إنهاء المهام في برنامج آخر لم تسمع عنه من قبل؟ مع مثل هذه الأسماء، فإن تحليل تنفيذ البرنامج سيقضي على الكثير من الوقت المفيد.

لقد قرأت الترميز، والآن دعونا نعود إلى إعلان المتغيرات.

لإنشاء متغير، يجب عليك أولاً كتابة الكلمة الأساسية var، ثم الاسم نفسه. هذا هو ما يبدو:

فار النص = "مرحبا، المستخدم!"

بعد ذلك، يتم الوصول إلى النص بدون "var":

النص = "نص جديد."

في هذه الحالة، سيتم الكتابة فوق القيمة.

للحصول على فهم أفضل، فكر في مثال يتم فيه إنشاء متغير واحد. وسوف ننتقل إلى معناها قبل وبعد إعادة الكتابة.

1 2 3 4 var text = "مرحبًا أيها المستخدم!"; تنبيه(نص); // ستتم طباعة "مرحبًا أيها المستخدم!" text= "نص جديد!"; تنبيه(نص); // سوف يطبع "نص جديد!"

var text = "مرحبًا أيها المستخدم!"; تنبيه(نص); // ستتم طباعة "مرحبًا أيها المستخدم!" text= "نص جديد!"; تنبيه(نص); // سوف يطبع "نص جديد!"

ميزات الكائنات العالمية

تنقسم جميع الكائنات التي تم إنشاؤها في كود JS إلى عالمية ومحلية. أعلاه شرحت ما هو الفرق بينهما. الآن دعونا نلقي نظرة فاحصة على الكائنات العالمية.

إنها جميعها وظائف ومتغيرات تم الإعلان عنها في النص الرئيسي للكود، أي. ليس داخل أي وظائف. تصبح جميعها في JS تلقائيًا خصائص كائن عالمي، وهو متاح بوضوح في المتصفحات ضمن نافذة الكلمات. دعونا نلقي نظرة على مثال.

سعر فار = 145؛ // إنشاء متغير عام

تنبيه(window.price); // الجواب: 145

حتى الآن كل شيء بسيط، ولكن كن مستعدا للمزالق. في بعض الأحيان، دون معرفة تفاصيل حفظ القيم المتغيرة والكتابة فوقها، يمكنك الكتابة فوق معلمات مهمة جدًا. من الصعب جدًا تعقب مثل هذه الأخطاء ومن المستحيل العثور عليها باستخدام المترجمين. لذلك، قم بتحليل المواد التالية بعناية.

المزالق والنطاق

لفهم المشكلة بشكل أفضل، سأعرض أولا برنامج صغير، حيث سأقوم في الوظيفة بإنشاء متغير محلي، ثم خارج حدوده - متغير عالمي.

اختبار الوظيفة () (ع = 2؛ إرجاع ع؛) تنبيه (ع)؛ // غير محدد ص = "نص مهم"؛ تنبيه (ع)؛ // سيعرض اختبار "النص المهم" () ؛ // استدعاء الوظيفة تنبيه (ع)؛ // سيتم طباعة 2

في البداية، في وظيفة الاختبار، قمت بتهيئة متغير محلي بالقيمة 2، ثم قمت بإنشاء متغير نص عام يقوم بتخزين بعض البيانات المهمة.

وهنا تظهر تلك "الكتلة تحت الماء".

أولاً، نظرًا لأنني استخدمت إنشاء العناصر وفقًا لقواعد معيار JavaScript القديم، فقد تم إنشاء جميع المتغيرات "p" فقط في وقت التعيين (عند استخدام التوجيه var، يتم إنشاء المتغيرات على الفور بالقيمة غير محدد، وأثناء التهيئة من خلال "= » تتم الكتابة فوق القيمة).

ثانيًا، في هذه الحالة، لتعيين قيمة للعناصر التي تم إنشاؤها ضمنيًا في JS، يتم استخدام عنصر موجود أو إنشاء متغير عام جديد. لذلك، في المثال أعلاه، بعد استدعاء وظيفة الاختبار، تم فقدان قيمة "p" العامة.

لتجنب الأعطال، استخدم دائمًا الكلمة الأساسية var. سيتم بعد ذلك الإعلان عن كافة الكائنات بشكل صريح وسيتم إنشاء كائنات جديدة.

وإليكم المثال المصحح:

اختبار الوظيفة () ( var p = 2؛ تنبيه (p)؛ إرجاع p؛ ) تنبيه (p)؛ // غير محدد var p = "نص مهم"; تنبيه (ع)؛ // سيعرض اختبار "النص المهم" () ؛ // استدعاء الوظيفة، في هذه الحالة سيتم عرض 2 تنبيه (ع)؛ // سيعرض "نص مهم"

الآن الكود يعمل بشكل صحيح كما لاحظت، فإن نطاق "p" المحلي يقع ضمن وظيفة الاختبار، والنطاق العام يقع ضمن بقية الكود.

بضع كلمات عن الثوابت

مثل جميع لغات البرمجة الأخرى، تحتوي JavaScript على ثوابت. ولمن لا يعرف ما هو، سأرفق التعريف.

الثابت هو نوع من المتغيرات التي تظل قيمتها دون تغيير.

وفقًا لقواعد بناء الجملة في JS، يتم كتابة أسمائهم دائمًا بأحرف صغيرة (كبيرة). على سبيل المثال،

فار MAIN_COLOR = "#fff"

ليس في لغة البرمجة النصية الوسائل التقنية، مما يجعل الثابت ثابتًا حقًا. في الواقع، فهي متغيرات عادية يمكن الكتابة فوقها. ومع ذلك، وفقًا للقواعد، يستخدم المطورون هذه العناصر ذات الأحرف الكبيرة في الاسم كثوابت ولا يغيرون معناها أثناء كتابة التعليمات البرمجية.

الغرض الرئيسي من الثوابت هو تخزين السلاسل المعقدة أو الأرقام المهمة أو القيم الأخرى التي، عند إعادة كتابتها، يكون من السهل ارتكاب خطأ مطبعي أو لا ينبغي تغييرها أبدًا، أو لتبسيط التعليمات البرمجية. على سبيل المثال، يمكن استخدام الثوابت لتخزين الطلبات المتكررة بشكل متكرر

تعمل المتغيرات بمثابة "حاويات" لتخزين المعلومات.

هل تتذكر جبر المدرسة الثانوية؟

هل تتذكر مدرسة الجبر؟ س=5، ص=6، ض=س+ص

هل تتذكر أنه يمكن استخدام حرف (مثل x) لتخزين قيمة (على سبيل المثال 5)، وأنه يمكنك استخدام المعلومات المذكورة أعلاه لحساب أن قيمة z هي 11؟

تسمى هذه الحروف بالمتغيرات، ويمكن استخدام المتغيرات لتخزين القيم (x=5) أو التعبيرات (z=x+y).

متغيرات جافا سكريبت

كما هو الحال في الجبر، يتم استخدام متغيرات جافا سكريبت لتخزين القيم أو التعبيرات.

يمكن أن يكون للمتغير اسم قصير، مثل x، أو اسم أكثر وصفًا، مثل carname.

قواعد أسماء متغيرات جافا سكريبت:

  • أسماء المتغيرات حساسة لحالة الأحرف (y وY هما متغيران مختلفان)
  • يجب أن تبدأ أسماء المتغيرات بحرف أو شرطة سفلية

ملاحظة: نظرًا لأن JavaScript حساس لحالة الأحرف، فإن أسماء المتغيرات حساسة أيضًا لحالة الأحرف.

مثال

يمكن أن تتغير قيمة المتغير أثناء تشغيل البرنامج النصي.

يمكنك الإشارة إلى متغير باسمه لعرض قيمته أو تغييرها.

الإعلان عن (إنشاء) متغيرات جافا سكريبت

يُشار إلى إنشاء المتغيرات في JavaScript بشكل أكثر شيوعًا باسم المتغيرات "التصريحية".

تعلن عن متغيرات JavaScript باستخدام الكلمة الأساسية var:

بعد تنفيذ التعليمات أعلاه، سيحتوي المتغير x على القيمة 5 وسيحتوي carname على القيمة Mercedes. ملحوظة: عند التعيينقيمة النص

متغير، وأرفقه بين علامتي اقتباس.

ملاحظة: إذا قمت بتعريف متغير مرة أخرى، فإنه لن يفقد قيمته.

جافا سكريبت المتغيرات المحلية أعلن المتغير في الداخلوظائف جافا سكريبت

يصبح محليًا وسيكون متاحًا فقط ضمن هذه الوظيفة.

(المتغير له نطاق محلي).

يمكنك الإعلان عن المتغيرات المحلية بنفس الاسم في وظائف مختلفة لأنه يتم التعرف على المتغيرات المحلية في الوظيفة التي تم الإعلان عنها.

يتم تدمير المتغيرات المحلية عند خروج الوظيفة.

ستتعلم المزيد عن الوظائف في دروس JavaScript اللاحقة.

المتغيرات العالمية لجافا سكريبت

تصبح المتغيرات المعلنة خارج الوظيفة عمومية، ويمكن لجميع البرامج النصية والوظائف الموجودة على الصفحة الوصول إليها.

يتم تدمير المتغيرات العامة عند إغلاق الصفحة.

إذا قمت بتعريف متغير دون استخدام "var"، يصبح المتغير دائمًا عالميًا.

تعيين قيم لمتغيرات جافا سكريبت غير المعلنة

إذا قمت بتعيين قيم لمتغيرات لم يتم الإعلان عنها بعد، فسيتم الإعلان عن المتغيرات تلقائيًا كمتغيرات عامة.

هذه العروض:

ستتعلم المزيد عن عوامل التشغيل في درس JavaScript التالي.

آخر تحديث: 04/05/2018

جميع المتغيرات في JavaScript لها نطاق محدد يمكنها العمل ضمنه.

المتغيرات العالمية

جميع المتغيرات التي تم الإعلان عنها خارج الوظائف تكون عالمية:

فار س = 5؛ دع د = 8؛ وظيفة DisplaySquare())( var z = x * x; console.log(z); )

هنا المتغيران x وd عالميان. ويمكن الوصول إليها من أي مكان في البرنامج.

المتغير المحدد داخل الدالة هو محلي:

الدالة DisplaySquare())( var z = 10; console.log(z); Let b = 8; console.log(b); )

المتغيران z وb محليان، وهما موجودان فقط داخل الدالة. لا يمكن استخدامها خارج الوظيفة:

وظيفة DisplaySquare())( var z = 10; console.log(z); ) console.log(z); // خطأ لأنه لم يتم تعريف z

عندما تنتهي الدالة من عملها، يتم تدمير جميع المتغيرات المحددة في الدالة.

إخفاء المتغيرات

ماذا لو كان لدينا متغيرين - أحدهما عالمي والآخر محلي - لهما نفس الاسم:

فار ض = 89؛ وظيفة DisplaySquare())( var z = 10; console.log(z); // 10 ) DisplaySquare(); // 10

في هذه الحالة، ستستخدم الدالة المتغير z الذي تم تعريفه مباشرة في الدالة. أي أن المتغير المحلي سوف يخفي المتغير العالمي.

فار أو السماح

عند استخدام عبارة Let، تحدد كل كتلة من التعليمات البرمجية نطاقًا جديدًا يوجد فيه المتغير. على سبيل المثال، يمكننا تعريف متغير على مستوى الكتلة وعلى مستوى الوظيفة في وقت واحد:

دع ض = 10؛ وظيفة DisplayZ())( Let z = 20; ( Let z = 30; console.log("Block:"، z); ) console.log("Function:"، z); ) DisplayZ(); console.log("Global:"، z);

هنا، داخل وظيفة DisplayZ، توجد كتلة من التعليمات البرمجية محددة حيث يتم تعريف المتغير z. إنه يخفي المتغير العام والمتغير z المحدد على مستوى الوظيفة. في برنامج حقيقييمكن أن تمثل الكتلة وظيفة متداخلة، block للحلقةأو إذا بنيات. ولكن على أي حال، تحدد هذه الكتلة نطاقًا جديدًا لا يوجد خارجه المتغير.

وفي في هذه الحالةسوف نحصل على إخراج وحدة التحكم التالية:

الكتلة: 30 الوظيفة: 20 العالمية: 10

باستخدام عامل التشغيل var، لا يمكننا تعريف متغير يحمل نفس الاسم سواء في دالة أو في كتلة من التعليمات البرمجية داخل تلك الوظيفة:

الدالة DisplaySquare())( var z = 20; ( var z = 30; // خطأ! تم تعريف المتغير z بالفعل console.log("Block:"، z); ) console.log("Function:"، z) ;)

أي أنه باستخدام var يمكننا تحديد متغير باسم واحد إما على مستوى الوظيفة أو على مستوى كتلة التعليمات البرمجية.

الثوابت

كل ما ينطبق على عامل Let ينطبق أيضًا على عامل const، والذي يسمح لك بتعريف الثوابت. تحدد كتل التعليمات البرمجية نطاق الثوابت، والثوابت المحددة في كتل التعليمات البرمجية المتداخلة تخفي الثوابت الخارجية التي تحمل الاسم نفسه:

كونست ض = 10؛ وظيفة DisplayZ())( const z = 20; ( const z = 30; console.log("Block:", z); // 30 ) console.log("Function:", z); // 20 ) DisplayZ ( ); console.log("Global:"، z); // 10

متغيرات غير معلنة

إذا لم نستخدم هذه الكلمة الأساسية عند تعريف متغير في دالة، فسيكون هذا المتغير عالميًا. على سبيل المثال:

شريط الوظائف())( foo = "25"; ) bar(); console.log(foo); // 25

على الرغم من أن المتغير foo لم يتم تعريفه في أي مكان خارج الدالة bar، إلا أنه متاح خارج الدالة في السياق الخارجي.

سيكون الأمر مختلفًا إذا لم نخصص قيمة للمتغير فحسب، بل قمنا أيضًا بتعريفه:

شريط الوظائف())( var foo = "25"; ) bar(); console.log(foo); // خطأ

الوضع الصارم

يمكن أن يؤدي تحديد المتغيرات العالمية في الوظائف إلى الأخطاء المحتملة. لتجنبها، استخدم الوضع الصارم:

"استخدام صارم"؛ شريط الوظائف())( foo = "25"; ) bar(); console.log(foo);

في هذه الحالة، سوف نتلقى الخطأ SyntaxError: معرف غير متوقع، مما يشير إلى أن المتغير foo لم يتم تعريفه.

هناك طريقتان لتعيين الوضع الصارم:

    أضف عبارة "استخدام صارم" إلى بداية كود JavaScript، ثم سيتم تطبيق الوضع الصارم على كل الكود

    أضف عبارة "استخدام صارم" إلى بداية نص الوظيفة، ثم سيتم تطبيق الوضع الصارم على هذه الوظيفة فقط

المتغيرات

الإعلان عن المتغيرات

قبل أن تتمكن من استخدام متغير في JavaScript، يجب الإعلان عنه. يتم الإعلان عن المتغيرات باستخدام الكلمة الأساسية var كما يلي:

فار ط؛ مبلغ فار؛

باستخدام الكلمة الأساسية var مرة واحدة، يمكنك الإعلان عن عدة متغيرات:

يمكن دمج إعلان المتغيرات مع تهيئتها:

رسالة var = "مرحبًا"; فار ط = 0، ي = 0، ك = 0؛

إذا لم يتم تحديد قيمة أولية في عبارة var، فسيتم الإعلان عن المتغير، لكن قيمته الأولية تظل غير محددة حتى يتم تغييرها بواسطة البرنامج.

إذا كانت لديك خبرة في استخدام لغات البرمجة مع أنواع البيانات الثابتة، مثل C# أو Java، فقد تلاحظ أن إعلانات المتغيرات في JavaScript تفتقر إلى تعريف النوع. يمكن للمتغيرات في JavaScript تخزين القيم من أي نوع. على سبيل المثال، في JavaScript يمكنك تعيين رقم لمتغير، ثم تعيين سلسلة إلى نفس المتغير:

فار ط = 10؛ أنا = "مرحبا";

باستخدام عبارة var، يمكنك الإعلان عن نفس المتغير أكثر من مرة. إذا كان الإعلان المتكرر يحتوي على مُهيئ، فإنه يعمل مثل بيان مهمة عادي.

إذا حاولت قراءة قيمة متغير غير معلن، فستقوم JavaScript بإنشاء خطأ. في الوضع الصارم الذي يوفره معيار ECMAScript 5، يظهر خطأ أيضًا عند محاولة تعيين قيمة لمتغير غير معلن. ومع ذلك، تاريخيًا، وعندما لا يتم التنفيذ في الوضع الصارم، إذا قمت بتعيين قيمة لمتغير لم يتم الإعلان عنه باستخدام عبارة var، فستقوم JavaScript بإنشاء هذا المتغير كخاصية للكائن العام، وسيعمل بنفس الطريقة تقريبًا متغير تم الإعلان عنه بشكل صحيح. وهذا يعني أنه ليس من الضروري الإعلان عن المتغيرات العالمية. ومع ذلك، تعتبر هذه عادة سيئة ويمكن أن تسبب أخطاء، لذا حاول دائمًا الإعلان عن متغيراتك باستخدام var.

نطاق متغير

نطاق المتغير هو جزء البرنامج الذي تم تعريف المتغير له. المتغير العام له نطاق عالمي - يتم تعريفه لبرنامج JavaScript بأكمله. وفي الوقت نفسه، يتم تعريف المتغيرات المعلنة داخل الدالة فقط في نصها. يطلق عليهم المحلية ولها نطاق محلي. تعتبر معلمات الوظيفة أيضًا متغيرات محلية، يتم تعريفها فقط داخل نص تلك الوظيفة.

ضمن نص الدالة، يكون للمتغير المحلي الأسبقية على المتغير العام الذي يحمل نفس الاسم. إذا قمت بتعريف متغير محلي أو معلمة دالة بنفس الاسم كمتغير عام، فسيتم إخفاء المتغير العام فعليًا:

نتيجة فار = "عالمية"؛ الدالة getResult() ( var result = "local"; return result; ); console.log(getResult()); // عرض "محلي"

عند الإعلان عن المتغيرات ذات النطاق العام، يمكن حذف عبارة var، ولكن عند الإعلان عن المتغيرات المحلية، يجب عليك دائمًا استخدام عبارة var.

© 2024 ermake.ru - حول إصلاح أجهزة الكمبيوتر - بوابة المعلومات