المعني الحرفي للكلمه هو الرفع و المعني البرمجي في ال JS هو انها بترفع تعريف متغير X من موقعه داخل الكود الي انت كاتبه لاعلي ال scope بحيث يكون متعرف قبل ما الكود يRun.
- طيب ايه ال scope دا ؟
= دا ليه شرح في بوست تاني مخصص ليه بس بشكل عام تقدر تعتبر الكود بتاعك عباره عن صناديق وكل صندوق جواه مجموعه من الاوامر .. الصندوق دا هو ال scope بتاع الكود (الاوامر) الي جواه .. تمام ؟
= في عندنا نوعين من ال Hoisting :
1) Variable hoisting
2) Function hoisting
***************************************************
= نبدا بأول نوع :: Variable Hoisting
في سيكشن رقم (1) بنحاول ن log ال variable X بدون ما نعرفه او نديله قيمه و دا بشكل بديهي لازم يدينا error وهوا من النوع Reference Error بمعني انه مش لاقي تعريف لل Variable دا
اما في السيكشن رقم (2) ف الي حصل اني عرفت ال variable Y بعد ال log function وبرغم كدا مطلعليش اي error وطلعي undefined
- طب ازاي دا حصل ؟
= لو بصينا لسيكشن رقم (3) هنلاقي تطبيق لل Hoisting وهوا ان ال JS عدلت في الكود بتاعنا وراء الكواليس و رفعت تعريف ال Variable Z قبل ال log function وبعديها ادت ليه القيمه بتاعته الي هيا 10 وعشان كدا مطلعش error لينا لانه دلوقتي ال variable متعرف حتي ولو ملوش قيمه دلوقتي بس الكود شايفه.
= خد بقا عندك الملاحظه دي :
بشكل عام ممكن الموضوع يبان جميل بس دا بيسبب احيانا مشاكل كتير من غير ما نحس بيها ودا ليه علاقه بموضوع ال scope ف مش هنتخش في المشاكل دي لحد البوست بتاع ال Scope عشان الموضوع يكون واضح بس عامه عشان نتجنب المشاكل دي بنستخدم في تعريف المتغيرات ال let او const لان دول خارج نطاق ال hoisting ف بكده بنقدر نتأكد ان القيم الي بنستخدمها مظبوطه و يكون عندنا clean code واضح بدون مشاكل خفيه.
***************************************************
= نيجي لتاني نوع وهوا ال function hoisting
= خد معلومه كدا ف السريع :
في عندنا 3 طرق تعريف لل function وهما :
1) Named function:
= function name ( ) { }
2) Expressions function
= const x = function ( ) { }
3) Arrow function
= const y = ( ) => { }
= نخش بقا في الموضوع
في سيكشن (5) هنبص نلاقي حاجه غريبه شويه وهيا انا استدعيت ال function قبل ما اعرفها ومطلع اي Error بالعكس دي اشتغلت وطلعت النتيجه مظبوطه !!
- ايه الي حصل ؟
= بص يا سيدي مش احنا قولنا ان ال hoisting بيرفع التعرف لأعلي ال scope ؟
- ايوه !
= دا الي حصل بالظبط وهوا ان ال JS خدت تعريف ال function ورفعته لفوق ف بقا الكود ماشي بالشكل الي في سيكشن (6)
= بس ال hoisting دا بيتطبق علي ال named function بس
= يعني بالنسبه لل expression function او ال arrow function مبيحصلش ليهم hoisting و بيتعاملو بنفس الطريقه
= في سيكشن 7 و 8 بنجرب ال expression & arrow function وهنلاقي انه مع ال const مديني Error مختلف عن الاتنين التانيين ودا مش بسبب ال hoisting دا بسبب ال const لانه هنا بيقول انه لازم اعرف ال قيمه بتاعه المتغير لانه ثابت
- طيب ايه ال scope دا ؟
= دا ليه شرح في بوست تاني مخصص ليه بس بشكل عام تقدر تعتبر الكود بتاعك عباره عن صناديق وكل صندوق جواه مجموعه من الاوامر .. الصندوق دا هو ال scope بتاع الكود (الاوامر) الي جواه .. تمام ؟
= في عندنا نوعين من ال Hoisting :
1) Variable hoisting
2) Function hoisting
***************************************************
= نبدا بأول نوع :: Variable Hoisting
في سيكشن رقم (1) بنحاول ن log ال variable X بدون ما نعرفه او نديله قيمه و دا بشكل بديهي لازم يدينا error وهوا من النوع Reference Error بمعني انه مش لاقي تعريف لل Variable دا
اما في السيكشن رقم (2) ف الي حصل اني عرفت ال variable Y بعد ال log function وبرغم كدا مطلعليش اي error وطلعي undefined
- طب ازاي دا حصل ؟
= لو بصينا لسيكشن رقم (3) هنلاقي تطبيق لل Hoisting وهوا ان ال JS عدلت في الكود بتاعنا وراء الكواليس و رفعت تعريف ال Variable Z قبل ال log function وبعديها ادت ليه القيمه بتاعته الي هيا 10 وعشان كدا مطلعش error لينا لانه دلوقتي ال variable متعرف حتي ولو ملوش قيمه دلوقتي بس الكود شايفه.
= خد بقا عندك الملاحظه دي :
بشكل عام ممكن الموضوع يبان جميل بس دا بيسبب احيانا مشاكل كتير من غير ما نحس بيها ودا ليه علاقه بموضوع ال scope ف مش هنتخش في المشاكل دي لحد البوست بتاع ال Scope عشان الموضوع يكون واضح بس عامه عشان نتجنب المشاكل دي بنستخدم في تعريف المتغيرات ال let او const لان دول خارج نطاق ال hoisting ف بكده بنقدر نتأكد ان القيم الي بنستخدمها مظبوطه و يكون عندنا clean code واضح بدون مشاكل خفيه.
***************************************************
= نيجي لتاني نوع وهوا ال function hoisting
= خد معلومه كدا ف السريع :
في عندنا 3 طرق تعريف لل function وهما :
1) Named function:
= function name ( ) { }
2) Expressions function
= const x = function ( ) { }
3) Arrow function
= const y = ( ) => { }
= نخش بقا في الموضوع
في سيكشن (5) هنبص نلاقي حاجه غريبه شويه وهيا انا استدعيت ال function قبل ما اعرفها ومطلع اي Error بالعكس دي اشتغلت وطلعت النتيجه مظبوطه !!
- ايه الي حصل ؟
= بص يا سيدي مش احنا قولنا ان ال hoisting بيرفع التعرف لأعلي ال scope ؟
- ايوه !
= دا الي حصل بالظبط وهوا ان ال JS خدت تعريف ال function ورفعته لفوق ف بقا الكود ماشي بالشكل الي في سيكشن (6)
= بس ال hoisting دا بيتطبق علي ال named function بس
= يعني بالنسبه لل expression function او ال arrow function مبيحصلش ليهم hoisting و بيتعاملو بنفس الطريقه
= في سيكشن 7 و 8 بنجرب ال expression & arrow function وهنلاقي انه مع ال const مديني Error مختلف عن الاتنين التانيين ودا مش بسبب ال hoisting دا بسبب ال const لانه هنا بيقول انه لازم اعرف ال قيمه بتاعه المتغير لانه ثابت
ليست هناك تعليقات:
إرسال تعليق