جابه‌جایی کدها

از ویکی‌کد، دانشنامهٔ برنامه‌نویسی
پرش به ناوبری پرش به جستجو

Hositing رفتار پیشفرض جاوا اسکریپت برای جابه‌جایی تعاریف به بالای صفحه است. [۱]

تعاریف در جاوا اسکریپت در بالای صفحه قرار می گیرند

در جاوا اسکریپت، یک متغیر را می‌توان بعد از اینکه از آن استفاده شد، تعریف کرد.

به معنای دیگر، یک متغیر را می‌توان قبل از تعریف شدن استفاده کرد.

مثال شماره ۱ نتیجه مشابه مثال شماره ۲ دارد:

مثال ۱

1x = 5; // Assign 5 to x
2
3elem = document.getElementById("demo"); // Find an element
4elem.innerHTML = x;                     // Display x in the element
5
6var x; // Declare x


مشاهدهٔ نتیجه


مثال ۲

1var x; // Declare x
2x = 5; // Assign 5 to x
3
4elem = document.getElementById("demo"); // Find an element
5elem.innerHTML = x;                     // Display x in the element


مشاهدهٔ نتیجه


برای درک این مطلب شما می‌بایست قوانین "hositing" را بدانید.

Hositing رفتار پیشفرض جاوا اسکریپت برای جا به جایی تعاریف‌ها به بالای scope (بالای اسکریپت یا تابع جاری) است.

کلمه کلیدی let و const

متغیرها و ثابت‌هایی که با کلمات let یا const تعریف شده باشند، جا به جا نمی‌شوند.

مطالب بیشتری را می‌توانید در مقاله مربوط به کلمات کلیدی let و Const بخوانید.

مقداردهی ها در جاوا اسکریپت جا به جا نمی شوند

جاوا اسکریپت تنها تعاریفی را جا به جا می‌کند که مقدار دهی (initialize) نشده باشند.

مثال ۱ نتیجه مشابهی نسبت به مثال ۲ ندارد:

مثال ۱

1var x = 5; // Initialize x
2var y = 7; // Initialize y
3
4elem = document.getElementById("demo"); // Find an element
5elem.innerHTML = x + " " + y;           // Display x and y


مشاهدهٔ نتیجه


مثال ۲

1var x = 5; // Initialize x
2
3elem = document.getElementById("demo"); // Find an element
4elem.innerHTML = x + " " + y;           // Display x and y
5
6var y = 7; // Initialize y


مشاهدهٔ نتیجه


آیا اینطور به نظر می‌رسد که متغیر y در آخرین مثال تعریف نشده (undefined) است؟

این تنها به خاطر تعریف متغیر (var y) است که در بالای صفحه مقدار دهی (7=) نشده‌است.

به خاطر ویژگی hositing، متغیر y قبل از استفاده از آن تعریف شده‌است، اما چون مقدار دهی‌ها جا به جا (hositing) نمی‌شوند، مقدار متغیر y تعریف نشده (undefined) است.

مثال شماره ۲ همانند مثال زیر است:

مثال

1var x = 5; // Initialize x
2var y;     // Declare y
3
4elem = document.getElementById("demo"); // Find an element
5elem.innerHTML = x + " " + y;           // Display x and y
6
7y = 7;    // Assign 7 to y


مشاهدهٔ نتیجه


متغیرهای خود را در بالای Scope تعریف کنید!

Hositing (برای بسیاری از توسعه دهندگان) ناشناخته است یا آنها این قابلیت جاوا اسکریپت را ندید می‌گیرند.

اگر یک توسعه دهنده مفهوم hositing را نداند، برنامه او ممکن است باگ (خطا) داشته باشد.

برای جلوگیری از ایجاد باگ‌ها، همیشه تمامی متغیرها را در ابتدای هر Scope تعریف کنید.

از آنجایی که این روش مطابق روشی است که جاوا اسکریپت کد را تفسیر می‌کند، پس قانون خوبی است.

جاوا اسکریپت در مد سخت گیرانه به شما اجازه نمی‌دهد که از متغیری که تعریف نشده استفاده کنید.

نکته نکته: در مورد "use strict" در فصل بعدی بخوانید.

منابع آموزشی