Mahmoud Mohamed68 نشر 3 فبراير أرسل تقرير نشر 3 فبراير (معدل) انا عندي مشكله في فهم طريقة عمل hoisting تم التعديل في 3 فبراير بواسطة Mahmoud Mohamed68 2 1 اقتباس
1 Hossam Mohamed15 نشر 3 فبراير أرسل تقرير نشر 3 فبراير هذا سلوك في الجافاسكريبت يستخدم لتعريف الدوال والمتغيرات قبل موقعها في الكود، تخيل انه يرفعها إلى أعلى الكود او الscope الذي يتم تعريفها فيه فمثلاً إن كتبت هذا الكود :- var x = 5; function NewFun(){ var y = 7; return y; } NewFun() سيتم اعتباره وفهمه كالتالي var x; x = 5; function NewFun(){ var y; y = 7; return y; } NewFun() لاحظ ان التعريفات ترفع إلى الأعلى ولكن القيم نفسها لا ترفع .. لذا توخى الحذر وافهم جيداً هذا السلوك حتى تتجنب تداخلات غير مرغوب فيها. 1 1 اقتباس
0 Khaled Osama3 نشر 3 فبراير أرسل تقرير نشر 3 فبراير في جافاسكريبت، Hoisting يعني أن تعريفات الدوال (functions) والإعلانات عن المتغيرات (variables declared with var) يتم رفعها إلى أعلى نطاقها (scope) قبل تنفيذ الكود. هذا لا يعني أن الكود يتم نقله فعليًا إلى الأعلى، بل يعني أن البيئة التنفيذية لجافاسكريبت تتعامل مع هذه الإعلانات كأنها موجودة في الأعلى. تخيل أنك في فصل دراسي، ولديك قائمة بأسماء الطلاب الذين يجب أن يقدموا عرضًا اليوم. عندما يبدأ اليوم الدراسي، يكتب المعلم أسماء الطلاب الذين سيقدمون على السبورة حتى قبل أن يبدأوا في العرض. هذا يعني أن الجميع في الفصل يعرف من سيقدم حتى قبل أن يحين دورهم. في عالم البرمجة، هذه العملية تشبه "Hoisting". في JavaScript، "Hoisting" هو سلوك يتم بموجبه "رفع" تعريفات الدوال (functions) والمتغيرات (variables) إلى أعلى النطاق الذي تم تعريفها فيه، وذلك قبل تنفيذ أي كود. هذا يعني أنه يمكنك استدعاء دالة أو استخدام متغير قبل أن يتم تعريفه في الكود. console.log(x); // undefined var x = 5; console.log(x); // 5 في المثال أعلاه، عندما نحاول طباعة قيمة x قبل تعريفه، لا نحصل على خطأ، بل نحصل على قيمة undefined. هذا لأن المتغير x تم "رفعه" إلى الأعلى، لكن دون تعيين قيمة له بعد. فقط عندما نصل إلى السطر الذي يعرّف x ويعطيه قيمة، يمكن استخدام هذه القيمة. مهم أن نعرف أن "Hoisting" يعمل بشكل مختلف قليلًا بين الدوال والمتغيرات. للدوال، يتم رفع تعريف الدالة بأكمله، مما يعني أنه يمكن استدعاء الدالة حتى قبل تعريفها في الكود sayHello(); function sayHello() { console.log("مرحباً!"); } هنا، حتى وإن تم استدعاء sayHello() قبل تعريفها، البرنامج يعمل دون مشكلة ويطبع "مرحباً!". لكن بالنسبة للمتغيرات المعرفة باستخدام let أو const، فإن "Hoisting" لا يعمل بنفس الطريقة؛ يتم رفع المتغير لكن لا يمكن استخدامه قبل تعريفه console.log(y); // ReferenceError: y is not defined let y = 5; في هذا المثال، محاولة استخدام y قبل تعريفه تؤدي إلى خطأ. النقطة الرئيسية هي أن "Hoisting" يجعل بعض الأجزاء من الكود متاحة للاستخدام قبل أن يتم تنفيذ سطورها فعليًا، ولكن يجب استخدامها بحكمة لتجنب الارتباك أو الأخطاء غير المتوقعة في البرنامج. اقتباس
0 عبدالباسط ابراهيم نشر 6 فبراير أرسل تقرير نشر 6 فبراير بالإضافة للشرح السابق نحتاج لنفهم لماذا تم إنشاء ما يسمى بال hoisting وما الفائدة منه حيث قد يبدو ال hoisting عشوائيًا وغير ضروري، خاصةً فيما يتعلق بالمتغيرات. فلماذا لا تُجبر جميع الأكواد على تعريف المتغيرات والدوال في أعلى النطاق؟ نشأ ال hoisting بشكل غير مقصود حيث كان الهدف هو تجنب الإجبار في تنفيذ الكود من أعلى إلى أسفل مثل لغات Lisp. أسباب تتعلق بأداء ال interpreter: حيث خلال تجميع الكود، يقوم interpreter بتحليله إلى أجزاء أصغر. يسمح بنقل تعريف الدوال إلى أعلى نطاقها بتنفيذها مباشرة من الذاكرة، مما قد يحسن الأداء. بينما لا يكون لتأثير hoisting على المتغيرات تأثير كبير على الأداء اقتباس
السؤال
Mahmoud Mohamed68
انا عندي مشكله في فهم طريقة عمل hoisting
تم التعديل في بواسطة Mahmoud Mohamed683 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.