انتقل إلى محتوى الدرس
الدرس 48
دورة جافا سكريبت

الكتل البرمجية Block Statement في JavaScriptJavaScript Block Statement

افهم الكتل البرمجية ({ ... }) في JavaScript: أتقن العزل الكتلي لمتغيرات let وconst، وتجنب تسرب var خارج الأقواس، وتعرّف على آلية حجب المتغيرات Shadowing.
أقسام الدرس
5
الأمثلة
2
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
3,449
محتوى الدرس
في هذا الدرس 5تصفّح المواضيع

تجمع الكتلة البرمجية (Block Statement) صفراً أو أكثر من الجمل داخل زوج من الأقواس المعقوفة { ... } ليعاملها محرك JavaScript كوحدة تنفيذية متكاملة. وبخلاف الكائنات الحرفية المسندة للمتغيرات، تقف الكتلة كوحدة تحكم ولا تحتاج لفاصلة منقوطة بعد قوس إغلاقها.

مخطط حدود الكتلة البرمجية وعزل متغيرات let وconst بداخلها مقابل تسرب متغيرات var خارجها

تعتمد جمل التحكم مثل if وfor وwhile على الكتل لتشغيل عدة أوامر معاً. ويُعد إغفال الأقواس المعقوفة في الشروط القصيرة سبباً شهيراً للأخطاء الخفية؛ إذ يُنفذ أي سطر ثانٍ يُضاف لاحقاً خارج الشرط دائماً! ويوضح الجدول سلوك التصريحات داخل الكتلة:

أداة التصريح داخل { ... }هل تُقرأ خارج الكتلة؟القاعدة الهندسية المعتمدة
constلا، تطلق ReferenceErrorالخيار الافتراضي للحسابات المحلية الثابتة
letلا، تطلق ReferenceErrorللعدادات والقيم المتغيرة داخل الكتلة
varنعم، تتسرب لنطاق الدالة أو العامتجنبها لمنع استبدال المتغيرات الخارجية

تعيش المتغيرات المعرفة بـ let وconst حصراً داخل حدود القوسين المعقوفين اللذين أُنشئت بداخلهما وتنتهي صلاحيتها فور إغلاق القوس }. بل يمكنك كتابة كتلة مستقلة لإجراء حساب فرعي مؤقت دون إشغال الأسماء في بقية الملف.

JavaScript
let finalBadge = '';
{
  const rawPrice = 240;
  const fee = 15;
  finalBadge = 'Paid: ' + (rawPrice + fee) + ' SAR';
}
document.getElementById('blk-out').textContent = finalBadge;

لأن الكلمة var صُممت قديماً قبل إدخال النطاق الكتلي في اللغة، فإنها تتجاهل أقواس الكتل العادية وجمل if وfor، فتتسرب إلى نطاق الدالة المحيطة أو النطاق العام وقد تستبدل قيمة متغير خارجي يحمل الاسم نفسه دون تنبيه!

يحدث حجب المتغيرات أو التظليل (Variable Shadowing) عند تعريف متغير جديد بـ let أو const داخل كتلة فرعية يحمل نفس اسم متغير خارجي؛ فتحجب النسخة الداخلية المتغير الخارجي مؤقتاً داخل الكتلة فقط، ثم يعود الخارجي للظهور بسلام بعد إغلاقها. ومع ذلك يُنصح باختيار أسماء متمايزة لزيادة وضوح القراءة.

JavaScript
const role = 'Viewer';
let innerCheck = '';
if (true) {
  const role = 'Admin';
  innerCheck = 'Inside: ' + role;
}
document.getElementById('shd-out').textContent = innerCheck + ' | Outside: ' + role;
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس بنية الكتل البرمجية، وأهمية الأقواس المعقوفة في الشروط والحلقات، والعزل المحكم لـ let وconst مقابل تسرب var، وآلية حجب المتغيرات. الخطوة التالية: انتقل إلى درس «المغلفات البرمجية Closures في JavaScript» لاكتشاف كيف تحتفظ الدوال الداخلية بذاكرة متغيرات دالتها الأم.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات3

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 3 مفهومةأول بطاقة، أول خطوة
01 Block Statement الكتلة البرمجية
مجموعة جمل برمجية محاطة بقوسين معقوفين تعاملها اللغة كوحدة واحدة ونطاق معجمي مستقل لمتغيرات let وconst.
للمراجعة
02 Block Scope النطاق الكتلي
قاعدة الرؤية التي تحصر صلاحية متغيرات let وconst داخل حدود القوسين المعقوفين اللذين عُرفت بداخلهما.
للمراجعة
03 Variable Shadowing حجب المتغيرات (التظليل)
تعريف متغير داخل كتلة فرعية بنفس اسم متغير محيط مما يحجب النسخة الخارجية مؤقتاً داخل حدود الكتلة فقط.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات2

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 2 مفهومةأول بطاقة، أول خطوة
01 GC GC
Garbage Collection
آلية إدارة الذاكرة التلقائية التي تحرر المتغيرات الكتلية المؤقتة فور انتهاء تنفيذ كتلتها.
للمراجعة
02 TDZ TDZ
Temporal Dead Zone
المنطقة الواقعة بين بداية قوس الكتلة المفتوح وحتى الوصول إلى سطر التصريح الفعلي عن متغير let أو const.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. بدّل بين التبويبين الأول والثاني في المحاكي لملاحظة كيف تكتب var فوق المتغير الخارجي بينما تحميه let.

  2. شغّل مثال role في محرر التجربة وتحقق من طباعة Admin بالداخل وبقاء Viewer بالخارج دون تأثر.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

10أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي10 أسئلة تنتظرك
01

ماذا يحدث عند محاولة قراءة ثابت const خارج القوسين المعقوفين اللذين صُرّح عنه بداخلهما؟

02

المتغير المعرف بالكلمة var داخل كتلة الشرط if يتسرب خارج أقواس الكتلة إلى نطاق الدالة أو النطاق العام.

03

في الكود "const x = 10; { const x = 99; }"، ما قيمة x بعد إغلاق القوس المعقوف للكتلة؟

04

يمكن كتابة كتلة أقواس معقوفة مستقلة في JavaScript بدون if أو for لعزل المتغيرات الحسابية المؤقتة.

05

لماذا تلزم معايير الهندسة بكتابة الأقواس المعقوفة حتى لو تكوّن فرع if من سطر واحد؟

06

ما نتيجة كتابة الكود "let a = 1; { var a = 2; }" عند تشغيله؟

07

بخلاف جمل الإسناد العادية، لا تتطلب الكتلة البرمجية المنتهية بقوس معقوف وضع فاصلة منقوطة بعدها.

08

كيف تسمح لفرعين مختلفين من case داخل switch بتعريف ثابت يحمل نفس الاسم "const msg"؟

09

تستطيع الكتلة الداخلية قراءة متغيرات النطاق الخارجي، بينما لا يستطيع الكود الخارجي قراءة متغيرات الكتلة الداخلية.

10

ما البنية التي تعزل متغير var فعلياً وتمنع خروجه إلى النطاق العام؟