نطاق الكتلة
النطاق هو جزء من برنامج يتوفر فيه متغير للاستخدام. عند إنشاء ملفات .js
ملف ، نقوم بإنشائه نطاق الملف بأكمله المراد إنشاؤه النطاق الداخلي ، يجب التصريح عنه بأقواس مجعدة {...}
.
// First scope
let fruit = 'Banana'
{
// Second scope
let fruit = 'Apple'
{
// Third scope
let fruit = 'Lime'
}
}
في هذا المثال ، أنشأنا ثلاثة متغيرات في نطاقات مختلفة ،التي لها نسختها الخاصة منfruit
متغير ، لذلك لا توجد أخطاء تحدث ، ولكن إذا حاولت إنشاء متغيرين بنفس الاسم في نفس النطاق ، سيحدث خطأ🙅 ♂️.
// First scope
let fruit = 'Banana'
{
// Second scope
let fruit = 'Apple'
let fruit = 'Lime' // An error will occur here
}
عند إنشاء ملفات بنيات مختلفة ، يمكنك أيضًا إنشاء نطاق لهذا البناء ، نظرًا لأنك تستخدم كتلة من الأقواس المتعرجة{...}
.
if (true) {
// Scope of the conditional operator
}
for (let i = 0; i > 5; i++) {
// Scope of the cycle
}
function test() {
// Function scope
}
في هذه الأمثلة ، كل بناء له نطاقه الخاص.
النطاق العالمي
عندما نقول النطاق العالمي ، فإننا نعني أن جميع النطاقات الأخرى هي أطفال لهذا النطاق. يحتوي النطاق العام على متغيرات تم الإعلان عنها خارج جميع الوظائف والكتل.
// Global scope
let fruit = 'Banana'
متغير تم إنشاؤه في النطاق العالمي يسمى global variable
. المتغير الشامل يمكن استخدامها في جميع نطاقات الأطفال.
النطاق المحلي
النطاق المحلي يحتوي على متغيرات تم التصريح عنها في جزء محدد من الكود. على سبيل المثال ، ستكون المتغيرات التي تم إنشاؤها داخل حلقة محلية.
for (let i = 0; i > 5; i++) {
// Variable i is local
}
المتغيرات المحلية يمكن استخدامها فقط داخل الكتلة التي تم الإعلان عنها فيها.
function learnJavaScript() {
function showFruit() {
// The variable fruit is local
let fruit = 'Banana'
}
// Therefore, we cannot use it outside the function.
return fruit
}
// ReferenceError: fruit is not defined
أمثلة
نحن نستخدم متغيرين بنفس الاسم في نطاقات مختلفة. الotherFruit()
ترجع الدالة أ fruit
متغير من النطاق الذي تمت تهيئته فيه كـ Lime
إذا أزلنا let
منotherFruit()
وظيفة ، ثم بدلاً من إنشاء متغير نحن نكتبه .
ماذا لو حاولنا استدعاء متغير محلي في نطاق الوالدين؟ يحدث خطأ بسبب حقيقة أننا نحاول في النطاق العالمي استدعاء متغير, الذي لم نخلقه.
function learnJavaScript() {
let num
for (let i = 0; i != 5; i++) {
num += i
}
return i
}
//ReferenceError: i is not defined
إنكار فار
في المقالةChange قلنا لك أننا لن نستخدمvar
, tله مرتبط بالنطاق.
- إذا قمت بإنشاء متغيرين في نفس النطاق بنفس الاسم باستخدام الكلمة الأساسية
let
orconst
, يحذرنا المترجم الفوري من ذلك من خلال عرض خطأ.
function learnJavaScript() {
let fruit = 'Banana'
let fruit = 'Lime'
return fruit
// SyntaxError: Identifier 'fruit' has already been declared
}
ولكن ، إذا قمت بإنشاء متغيرات بنفس الاسم باستخدام var
, سوف يعيد تعيينها.
خطأ لا يحدث ، لأنvar
قام بالكتابة فوق المتغير fruit
- بعد إنشاء متغير عالمي مع
var
, يمكننا تغييره من النطاق المحلي عن طريق إنشاء متغير آخر بنفس الاسم معvar
. نطاقvar
يقتصر على وظيفة أو نص.
- المتغيرات تم إنشاؤها باستخدام
var
تعتبر معلنة منذ بداية تنفيذ البرنامج النصي ، بغض النظر عن مكان الإعلان.
- لم يكن لدى JavaScript نطاقات كتلة قبل ES6. أولئك. أي متغير تم إنشاؤه باستخدام الكلمة الأساسية
var
داخل كتلة سيكون مرئيًا خارجه.
if (true) {
var fruit = 'Apple' // the variable will be visible outside the given block
}
console.log(fruit) // "Apple"
if (true) {
let fruit = 'Apple' // the variable will not be visible outside the given block
}
console.log(fruit) // "Apple"
نظرًا للأسباب المذكورة ، قرر المطورون عدم استخدام var
مشاكل؟
اكتب لDiscord محادثة.
أسئلة:
متى نقوم بإنشاء النطاق الأول؟
- عند إنشاء دورة
- عند إنشاء ملف
- عند إنشاء كتلة
عند إنشاء بيان شرطي ، هل تم إنشاء نطاق جديد؟
- نعم
- لا
أين يتم إنشاء المتغير المحلي؟
- في جزء معين من الكود
- خارج كل الكتل
لفهم مقدار ما تعلمته في هذا الدرس ، قم بإجراء الاختبار في mobile application من مدرستنا في هذا الموضوع.
الروابط
المساهمون ✨
الشكر يعود إلى هؤلاء الأشخاص الرائعين (emoji key):
IIo3iTiv | Dmitriy Vasilev 💵 | Resoner2005 🐛 🎨 🖋 | Navernoss 🖋 🐛 🎨 |