هویسینگ (Hoisting) در متغیرها و توابع - آزمون آنلاین جاوا اسکریپت
آزمون جاوااسکریپت - هویسینگ (Hoisting) در متغیرها و توابع
این یک آزمون چالشبرانگیز در مورد یکی از مفاهیم کلیدی و گاهی گیجکننده در جاوااسکریپت، یعنی هویسینگ، هست. قراره با هم بررسی کنیم که چطور جاوااسکریپت کد رو تفسیر میکنه و چه تأثیری روی متغیرها و توابع داره.

با شرکت در این کوییز، میتونی میزان تسلط خودت رو در مورد این موضوع بسنجی و همزمان دانشات رو دربارهی نکات ظریف هویسینگ افزایش بدی.
سوالات طوری طراحی شدن که تو رو به چالش بکشن و باعث بشن عمیقتر به این مفهوم فکر کنی. این آزمون توسط تیم طراحی آزمونهای پاموه آماده شده تا بهت کمک کنه مسیر یادگیریات رو بهتر ادامه بدی.
هویسینگ چیست؟ یک نگاه دقیقتر
هویسینگ به زبان ساده، فرآیندی هست که در اون مفسر جاوااسکریپت، اعلان (declaration) متغیرها و توابع رو به بالای اسکوپ (scope) فعلی میبره. این اتفاق قبل از اجرای کد میافته.
به همین دلیل، میتونی از یک متغیر یا تابع قبل از اینکه در کد تعریف شده باشه، استفاده کنی.
اما یه نکته مهم اینه که فقط خود اعلانها منتقل میشن، نه مقداردهیها (initialization). یعنی اگه یک متغیر رو با var تعریف کنی، میتونی قبل از مقداردهی ازش استفاده کنی، ولی مقدارش undefined خواهد بود.
اما اگه از let یا const استفاده کنی، با یک خطا مواجه میشی چون اینها از هویسینگ متفاوتی برخوردارن و یک ناحیه زمانی مرده (temporal dead zone) دارن.
نمونههایی از هویسینگ در عمل
اینجا چند مثال از کارهایی که در این آزمون باهاشون مواجه میشی رو آوردم:
-
هویسینگ با
var:console.log(myVar); // undefined var myVar = 10; console.log(myVar); // 10در این مثال، مفسر جاوااسکریپت خط
var myVar;رو به بالای اسکوپ منتقل میکنه و فقط مقداردهی سر جاش باقی میمونه. به همین خاطر، اولینconsole.logمقدارundefinedرو نشون میده. -
هویسینگ با توابع:
sayHello(); // Hello, world! function sayHello() { console.log('Hello, world!'); }در این حالت، چون
sayHelloیک تابع معمولی هست، کل تعریف اون به بالا منتقل میشه و میتونی قبل از اینکه تعریفش کنی، اون رو صدا بزنی. اما اگه تابع رو به صورت یک عبارت تابع (function expression) تعریف کنی، رفتار متفاوتی خواهی دید.
تفاوتهای کلیدی در هویسینگ
جدول زیر بهت کمک میکنه تفاوتهای اصلی هویسینگ رو بهتر درک کنی. این نکات از مواردی هستن که سوالات آزمون بر اساسشون طراحی شدن.
| مورد | var |
let و const |
توابع (Functions) |
|---|---|---|---|
| زمان هویسینگ | فقط اعلان متغیر | اعلان متغیر، اما در TDZ (ناحیه زمانی مرده) قرار میگیرد | کل تعریف تابع |
| رفتار قبل از مقداردهی | مقدار undefined |
خطا (ReferenceError) | قابل استفاده |
| اسکوپ | اسکوپ تابعی | اسکوپ بلاکی | اسکوپ تابعی یا سراسری |
چی یاد میگیری؟
با شرکت در این آزمون، میتونی بفهمی چطور رفتار هویسینگ روی خروجی کدها تاثیر میذاره. سوالات موجود در این آزمون در مورد تفاوتهای هویسینگ در متغیرها و توابع هستن، مثلاً اینکه وقتی یک متغیر با var و let تعریف میشه، چه اتفاقی میافته یا اینکه صدا زدن یک تابع قبل از تعریفش چه نتیجهای داره.
با شرکت در این آزمون، اطلاعات دقیقی دربارهی این مفاهیم به دست میاری و میتونی از اشتباهات رایج جلوگیری کنی.
با آمادگی کامل، روی "دکمه شروع" کلیک کن و وارد دنیای جذاب هویسینگ در جاوااسکریپت شو. موفق باشی!