مفهوم Hoisting در جاوا اسکریپت

دوستان سلام

این Hoisting قصه ما خیلی اسمش بزرگه ولی خودش هیچی نیست بریم ببینیم چی هس اصلا


این کد ها رو در نظر بگیرید

console.log(a);
// output : ReferenceError : a is not defined

و این قطعه کد رو :

var a;
console.log(a);
//output : undefined

فرق این ارور ها چیه ؟

اولیش a کلا وجود نداره و کلا ReferenceError می ده و توضیح می ده که متغیر یا ثابتی به اسم a وجود نداره

ولی توی مورد دوم a وجود داره ولی مقدارش undefined یعنی مقدار دهی نشده برنامه ارور نمی ده و توی کنسول مقدار undefined چاپ می شه


خب حالا Hoisting چیه ؟

باز می خوام مثال بزنم این تیکه کد رو در نظر بگیرید :

console.log(a);
var a = 40;
// output : undefined 

اگر کد های جاوا اسکریپت دقیقا خط به خط کامپایل و اجرا بشن توقع داریم مثل مورد اول با ReferenceError مواجه بشیم و کد اجرا نشه و به ارور بخوره ولی نمی خوره :) و مقدار برابر با undefined می شه چرا ؟


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

تعریف متغییر ها حین کامپایل اتفاق می افته و مقدار دهی به متغییر ها حین اجرا یعنی چی ؟

یعنی کامپیوتر کد های بالا رو به این صورت می بینیه

var a;
console.log(a);
a = 40;

بخاطر همینه که ارور نمی ده و مقدار undefined می شه

معنی Hoisting یعنی بالا کشیدن اگر دقت کنید تعریف متغییر ها به بالای برنامه کشیده شد


آقا داود

امیدوارم مفید باشه :)