با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، در بخش قبلی به بررسی و مرور مباحث مفهوم Scope در جاوا اسکریپت و عملکرد آن پرداختیم.Scope در واقع محدوده ی مکانی که متغییر ها را در آن تعریف کرده ایم را مشخص می کند. که متغیرها نیز معمولا در دو حوزه ی عمومی و محلی (مانند توابع) تعریف می شود، حالا در این بخش قصد داریم به مباحث رفتار Hoisting در جاوا اسکریپت بپردازیم که Scope متغیرها را به بالاترین حد خود می رساند.
در ادامه ی این مبحث شما را با مفهوم کلی رفتار Hoisting در جاوا اسکریپت و نمونه هایی از آن اشنا می کنیم.
Hoisting در جاوا اسکریپت یک رفتار پیش فرض است که تعاریف را (مانند تعریف متغیرها) را به بالا می برد.
در جاوا اسکریپت می توان یک متغیر را بعد از استفاده کردن، تعریف کرد!
و یا به عبارتی دیگر یک متغیر را می توان قبل از تعریف کردن استفاده کرد.
دو مثال زیر یک نتیجه را به دنبال خواهند داشت :
1 2 3 4 5 6 | x = 5; // Assign 5 to x elem = document.getElementById("demo"); // Find an element elem.innerHTML = x; // Display x in the element var x; // Declare x |
1 2 3 4 5 | var x; // Declare x x = 5; // Assign 5 to x elem = document.getElementById("demo"); // Find an element elem.innerHTML = x; // Display x in the element |
با درک مثال های فوق، شما مفهوم “hoisting” را نیز درک خواهید کرد.
در جاوا اسکریپت متغیرها و ثابت ها با کلمات کلیدی let یا const تعریف می شوند.
جاوا اسکریپت فقط برای تعاریف رفتار hoist دارد، ما درباره ی مقداردهی اینگونه نیست.
دو مثال زیر نتایج یکسانی ندارند :
1 2 3 4 5 | var x = 5; // Initialize x var y = 7; // Initialize y elem = document.getElementById("demo"); // Find an element elem.innerHTML = x + " " + y; // Display x and y |
1 2 3 4 5 6 | var x = 5; // Initialize x elem = document.getElementById("demo"); // Find an element elem.innerHTML = x + " " + y; // Display x and y var y = 7; // Initialize y |
آیا معنا این است که y در مثال آخر تعریف نشده است؟
این به این علت است که فقط اعلام (var y)، نه مقدار اولیه (= ۷) به بالا برسد.
به دلیل بالا بردن، y پیش از استفاده از آن اعلام شده است، اما چون مقداردهی نشده است، مقدار y مشخص نیست.
حالا مثال دوم را می توان به صورت زیر نوشت :
1 2 3 4 5 6 7 | var x = 5; // Initialize x var y; // Declare y elem = document.getElementById("demo"); // Find an element elem.innerHTML = x + " " + y; // Display x and y y = 7; // Assign 7 to y |
Hoisting (به بسیاری از توسعه دهندگان) یک رفتار ناشناخته یا نادیده گرفته شده از جاوا اسکریپت است.
در صورتی که یک توسعه دهنده درک کند، برنامه ها ممکن است حاوی اشکالات (خطا) باشند.
برای جلوگیری از اشکالات، همیشه همه متغیرها را در ابتدای هر دامنه اعلام کنید.
از آنجا که جاوا اسکریپت چگونه کد را تفسیر می کند، همیشه یک قانون خوب است.
جاوا اسکریپت در حالت strict اجازه نمی دهد که متغیرهای مورد استفاده در صورت عدم اعلام استفاده شوند.
در این بخش نیز به بررسی یکی از رفتارهای مهم و کاربردی جاوا اسکریپت پرداختیم، رفتار Hoisting در جاوا اسکریپت با بالابردن خودکار تعاریف در کامپایل و تفسیر، جلوی بسیاری از خطاهای ناشی از استفاده ی متغیر قبل از تعریف آن را می گیرد.
محمد
در مثال دوم مقدار دهی در hoist عدد ۷ نباید نشان داده شود.
پی وی لرن
سلام
بله درست است چون ما قبلا از این مثال در مثال قبل مقدار داده ایم برای همین مقدار ۷ را نشان می دهد.
ممنون که اطلاع داده اید.