جا به جایی کدها در جاوا اسکریپت

از ویکی کد
پرش به ناوبری پرش به جستجو
Main Page Tutorial
JavaScript-menu.png
موارد آموزشی
فرم‌ها در جاوا اسکریپت
اشیاء در جاوا اسکریپت
تابع در جاوا اسکریپت
HTML DOM در جاوا اسکریپت
Browser BOM در جاوا اسکریپت
AJAX در جاوا اسکریپت
JSON در جاوا اسکریپت
جی‌کوئری در برابر جاوا اسکریپت
مثال‌های جاوا اسکریپت
مرجع جاوا اسکریپت

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

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

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

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

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

مثال ۱

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

مثال ۲

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

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

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

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

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

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

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

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

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

مثال ۱

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

مثال ۲

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

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

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

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

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

مثال

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

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

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

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

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

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

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

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

منابع آموزشی