در سایر زبان های برنامه نویسی یا اسکریپت نویسی سمت سرور متغیر ها و فانکشن ها باید قبل از استفاده تعریف شوند.
در زبان جاوا اسکریپت می توانید از فانکشن ها و متغیر ها قبل از تعریف آنها نیز استفاده کنید.
این قابلیت به این خاطر است که کامپایلر جاوا اسکریپت تمام تعریف متغیر ها را به صورت اتوماتیک به بالای اسکریپت انتقال میدهد تا هیچگونه پیغام خطایی در آینده ایجاد نشود. به این مفهوم بالا بردن یا hoisting گفته می شود.

مثال زیر این مفهموم را بهتر نشان می دهد:
x = 1;
alert('x = ' + x); // display x = 1
var x;
فصل 25 – مثال 1
همچنین با این مفهوم یک متغیر میتواند به یک متغیر دیگر انتساب داده شود قبل از تعریف هر دو متغیر، مانند مثال زیر:
x = 1;
y = x;
alert('x = ' + x);
alert('y = ' + y);
var x;
var y;
فصل 25 – مثال 2
مفهوم hoisting یا بالا بردن فقط در هنگام تعریف یک متغیر انجام پذیر است نه در هنگامی که به آن متغیر در همان خط تعریف یک مقدار انتساب میدهیم.
به مثال زیر توجه کنید، پیغام آلرت برابر undefined خواهد بود:
alert('x = ' + x); // display x = undefined
var x = 1;
فصل 25 – مثال 3
در مثال بالا پیغام undefined به این علت است که مفهوم hoisting فقط برای تعریف متغیر به عنوان مثال به صورت var x;
کار می کند.
مفهوم بالا بردن یا Hoisting در تعریف فانکشن ها
زبان جاوا اسکریپت به همان روشی که مفهوم hoisting را برای تعریف متغیرها اعمال میکند، برای تعریف فانکشن ها نیز اعمال خواهد کرد.
مثال زیر نشان دهنده مفهوم hoisting در هنگام تعریف یک فانکشن در زبان جاوا اسکریپت است:
alert(Sum(5, 5)); // 10
function Sum(val1, val2)
{
return val1 + val2;
}
فصل 25 – مثال 4
دقت کنید که زبان جاوا اسکریپت تعریف عبارات عملیاتی یا همان function expression را به بالا منتقل نمی کند. به مثال زیر توجه کنید:
Add(5, 5); // error
var Add = function Sum(val1, val2)
{
return val1 + val2;
}
فصل 25 – مثال 5
در Hosting جاوا اسکریپت تعریف فانکشن ها بالاتر از تعریف متغیرها قرار خواهد گرفت
جاوا اسکریپت به طور اتوماتیک تعریف فانکشن ها را بالاتر از تعریف متغیرها قرار خواهد داد، مثال زیر این موضوع را اثبات می کند:
alert(UseMe);
var UseMe;
function UseMe()
{
alert("UseMe function called");
}
فصل 25 – مثال 6
مثال بالا تعریف فانکشن UseMe را نشان خواهد داد. این موضوع بیان میکند که تعریف فانکشن ها در زبان جاوا اسکریپت بالاتر از تعریف متغیرها قرار خواهد گرفت.