Hoisting در جاوااسکریپت چیست و چرا دسترسی به let/const قبل از تعریف با var رفتار متفاوتی دارد؟
Explain what JavaScript hoists, and why accessing a let/const binding before its declaration behaves differently from var.
تعریفها پیش از اجرای کد در محیط اجرا ثبت میشوند، اما مقداردهی فرق دارد. var با undefined مقداردهی اولیه میشود، در حالیکه let/const تا رسیدن اجرای برنامه به خط تعریف در TDZ بدون مقدار میمانند. Function declaration همراه بدنه hoist میشود.
var دارای function scope است و در مرحلهی ایجاد execution context با undefined مقداردهی اولیه میشود. let و const block scope دارند و تا رسیدن اجرای برنامه به declaration داخل TDZ هستند. const فقط از re-assignment جلوگیری میکند و Object داخل آن همچنان میتواند mutable باشد.
برای یک پاسخ حرفهای، ترتیب مناسب این است: تعریف کوتاه → نحوهی کار → مثال واقعی → محدودیت یا trade-off. این ساختار هم ساده است و هم نشان میدهد مفهوم را واقعاً فهمیدهای.
این سؤال نشان میدهد execution context را فهمیدهای یا فقط syntax را حفظ کردهای.