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

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

المنصة

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

الحساب

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

روابط

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

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

صُنع بـ في مصر

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

منهج JavaScript

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

كل اللغات
مدرسة البرمجة/منهج JavaScript/مفهوم الـ Hoisting في جافاسكريبت

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

hoisting javascriptالرفع في جافاسكريبتtemporal dead zonevar let hoistingfunction hoisting

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

1
النوعيُرفع؟القيمة قبل التعريف
varنعمundefined
let / constنعم (لكن TDZ)ReferenceError
Function Declarationنعم بالكاملالدالة تعمل بشكل طبيعي
Function Expressionحسب نوع المتغيرReferenceError أو undefined

الشرح

الـ Hoisting هو سلوك داخلي في محرك جافاسكريبت يجعل تصريحات (Declarations) المتغيرات والدوال تُرفع فعلياً إلى أعلى نطاقها قبل تنفيذ أي كود، رغم أنك كتبتها في مكان لاحق. المهم فهمه هنا أن "التصريح" فقط يُرفع، وليس "التعيين" (القيمة).

مع var، يُرفع التصريح ويُهيَّأ المتغير تلقائياً بقيمة undefined حتى يصل التنفيذ لسطر التعيين الفعلي — لهذا يمكنك استخدام متغير var قبل سطر تعريفه دون خطأ، لكنه سيكون undefined وليس القيمة المتوقعة.

مع let وconst، يحدث Hoisting أيضاً لكن بطريقة مختلفة تماماً: يُرفع التصريح لكن المتغير يبقى في منطقة تُسمى "Temporal Dead Zone" (منطقة ميتة مؤقتاً) من بداية النطاق حتى سطر التعريف الفعلي. أي محاولة لاستخدام المتغير في هذه المنطقة تُنتج خطأ ReferenceError صريحاً، وهذا أفضل بكثير من undefined الصامت لأنه يكشف الأخطاء مبكراً.

إعلانات الدوال (Function Declarations) تخضع لـ Hoisting الكامل — يُرفع التصريح والتعريف الكامل للدالة معاً، لذا يمكن استدعاء الدالة قبل مكان تعريفها في الكود بأمان تام. لكن تعبيرات الدوال (Function Expressions) وDoدوال Arrow لا تتمتع بهذه الميزة، لأنها في جوهرها متغيرات (let/const/var) تُسند لها دالة كقيمة، وتخضع لنفس قواعد Hoisting الخاصة بنوع التصريح المستخدم.

الصياغة (Syntax)

syntax
1console.log(س); // undefined (وليس خطأ) بسبب Hoisting مع var
2var س = 5;
3
4// console.log(ص); // ❌ ReferenceError: Cannot access before initialization
5let ص = 10;
6
7مرحبا(); // ✅ يعمل بأمان: Function Declaration مرفوعة بالكامل
8function مرحبا() {
9 console.log("مرحباً!");
10}

أمثلة عملية

مثال 1: مقارنة عملية بين var و let في Hoisting

مقارنة عملية بين var و let في Hoisting
1// var مقابل let في الـ Hoisting
2function اختبار() {
3 console.log(أ); // undefined
4 var أ = 1;
5
6 try {
7 console.log(ب); // خطأ
8 let ب = 2;
9 } catch (خطأ) {
10 console.log("خطأ:", خطأ.message);
11 }
12}
13اختبار();

مثال 2: الفرق بين Function Declaration و Expression في Hoisting

الفرق بين Function Declaration و Expression في Hoisting
1// Function Declaration مرفوعة بالكامل، لكن Function Expression لا
2حساب_عادي(); // ✅ يعمل
3function حساب_عادي() {
4 console.log("أعمل حتى قبل تعريفي في الكود!");
5}
6
7// حساب_سهمي(); // ❌ خطأ: Cannot access before initialization
8const حساب_سهمي = () => {
9 console.log("لا أعمل قبل تعريفي");
10};

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

  • —فقط التصريح يُرفع في Hoisting، وليس التعيين (القيمة) — تذكّر هذا الفرق جيداً.
  • —let وconst يقعان في "Temporal Dead Zone" حتى سطر تعريفهما، فيرميان خطأ واضحاً بدل undefined صامت.
  • —إعلانات الدوال (function اسم(){}) تُرفع بالكامل ويمكن استدعاؤها قبل تعريفها في الكود بأمان.
  • —اعتمد دائماً على تعريف المتغيرات والدوال قبل استخدامها في الكود لتجنب الاعتماد على Hoisting أصلاً — كود أوضح وأقل أخطاء.

الدرس السابق

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

الدرس التالي

الكائنات بالتفصيل (JavaScript Objects)

نوفيل

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

المنصة

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

الحساب

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

روابط

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

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

صُنع بـ في مصر