نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
نوفيل

منصة تعليم البرمجة الأولى بالعربي. تعلم من الصفر حتى الاحتراف مع كورسات احترافية وتحديات ذكاء اصطناعي.

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر

نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
JS

منهج JavaScript

دليل مرجعي شامل

كل اللغات
مدرسة البرمجة/منهج JavaScript/نطاق المتغيرات (Global vs Local Scope)

نطاق المتغيرات (Global vs Local Scope)

scope javascriptنطاق المتغيرات جافاسكريبتglobal scope local scopeblock scope jsscope chain

جدول مرجعي سريع

1
النطاقأين يُعرَّفالوصول إليه
Global Scopeخارج أي دالة أو كتلةمن أي مكان في البرنامج
Function Scopeداخل دالة (var)داخل الدالة فقط
Block Scopeداخل {} (let/const)داخل تلك الكتلة فقط

الشرح

النطاق (Scope) يُحدد أين في الكود يمكن الوصول إلى متغير معين. يوجد نوعان أساسيان: النطاق العام (Global Scope) للمتغيرات المُعرَّفة خارج أي دالة أو كتلة، ويمكن الوصول إليها من أي مكان في البرنامج بالكامل. والنطاق المحلي (Local Scope) للمتغيرات المُعرَّفة داخل دالة أو كتلة معينة، ولا يمكن الوصول إليها من خارجها.

مع let وconst، يوجد نطاق أدق يُسمى نطاق الكتلة (Block Scope) — أي متغير مُعرَّف داخل أي أقواس {} (سواء دالة، شرط if، أو حلقة) يكون محصوراً داخلها فقط ولا يتسرب خارجها. هذا يختلف عن var التي كانت تتجاهل نطاق الكتلة وتلتزم فقط بنطاق الدالة، وهو ما كان يُسبب أخطاء خفية شهيرة في الكود القديم.

مفهوم "سلسلة النطاق" (Scope Chain) يعني أن أي دالة داخلية يمكنها الوصول لمتغيرات النطاقات المحيطة بها (الدالة الأب، ثم النطاق العام)، لكن العكس غير صحيح — النطاق الخارجي لا يمكنه أبداً الوصول لمتغيرات معرَّفة داخل نطاق أدق منه.

من أفضل الممارسات البرمجية تقليل استخدام المتغيرات العامة (Global Variables) قدر الإمكان، لأنها تجعل تتبع من يُعدّل القيمة ومتى أمراً صعباً جداً في البرامج الكبيرة، وقد تُسبب تعارضاً بين أجزاء مختلفة من الكود تستخدم نفس الاسم بالخطأ. الأفضل هو حصر المتغيرات داخل أضيق نطاق ممكن يحتاجها فعلاً.

الصياغة (Syntax)

syntax
1let متغير_عام = "أراني الجميع"; // Global Scope
2
3function دالة() {
4 let متغير_محلي = "أراني فقط هنا"; // Local/Function Scope
5 console.log(متغير_عام); // ✅ يعمل: يصل للنطاق العام
6}
7
8// console.log(متغير_محلي); // ❌ خطأ: غير معرّف هنا

أمثلة عملية

مثال 1: الفرق بين let و var في نطاق الكتلة

الفرق بين let و var في نطاق الكتلة
1// نطاق الكتلة block scope مع let
2if (true) {
3 let محلي = "داخل الشرط";
4 var قديم = "خارج نطاق الكتلة";
5}
6// console.log(محلي); // ❌ خطأ: محصور داخل if
7console.log(قديم); // ✅ "خارج نطاق الكتلة" — var تتجاهل block scope

مثال 2: سلسلة النطاق (Scope Chain)

سلسلة النطاق (Scope Chain)
1// سلسلة النطاق Scope Chain
2let مستوى1 = "أ";
3function خارجية() {
4 let مستوى2 = "ب";
5 function داخلية() {
6 let مستوى3 = "ج";
7 // الدالة الداخلية ترى كل المستويات الخارجية
8 console.log(مستوى1, مستوى2, مستوى3);
9 }
10 داخلية();
11}
12خارجية(); // "أ ب ج"

نصائح احترافية

  • —قلّل من استخدام المتغيرات العامة قدر الإمكان — كل متغير عام هو مصدر محتمل للأخطاء غير المتوقعة.
  • —let وconst محصوران بنطاق الكتلة {} أياً كان نوعها (دالة، شرط، حلقة)، بعكس var.
  • —الدالة الداخلية ترى متغيرات كل الدوال المحيطة بها، لكن العكس غير صحيح أبداً.
  • —عرّف المتغيرات في أضيق نطاق ممكن — هذا يُسهّل القراءة ويمنع تعارض الأسماء.

الدرس السابق

الدوال السهمية (Arrow Functions)

الدرس التالي

مفهوم الـ Hoisting في جافاسكريبت

نوفيل

منصة تعليم البرمجة الأولى بالعربي. تعلم من الصفر حتى الاحتراف مع كورسات احترافية وتحديات ذكاء اصطناعي.

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر