scope در جاوا اسکریپت


به طور کلی مجموعه ای از قواعد هست که مشخص می کند چگونه می توانیم به متغیر ها با استفاده از نامشان دسترسی داشته باشیم و در چه جاهایی به آنها اجازه دسترسی داریم و میتوانیم از آنها استفاده کنیم. در این مقاله سعی میکنیم به طور کامل در مورد scope در جاوا اسکریپت صحبت کنیم. اما اگه علاقه مند بودید میتونید ویدئو زیر رو ببینید که مفصل این موضوع رو بررسی کردیم.
مثال :
1 2 3 4 5 6 7 8 9 10 11 |
function one(){ let a = 1; console.log(a); } function two(){ let a = 2; console.log(a); } one(); //1 two(); //2 |
در مثال بالا انتظار داریم به دلیل اینکه از متغیر با نام a دو بار استفاده شده با خطا مواجه شویم اما به دلیل اینکه هر کدام در scope های جداگانه تعریف شده اند.
هیچ مشکلی برای این استفاده از نام یکسان به وجود نمی آید.ولی باید به این نکته توجه کنیم که نام متغیر استفاده شده در هر scope منحصر به فرد باشد.
همچنین می توانیم از یک scope در یک scope دیگر استفاده کرد.و در اینصورت scope درونی به متغیر های هر دو scope دسترسی دارد.
برای درک بیشتر مثال پایین رو باهم مورد بررسی قرار میدیم :
مثال :
1 2 3 4 5 6 7 8 9 10 |
function outer(){ let a = 1; function inner(){ let b = 2; console.log(a+b); //3 } inner(); console.log(a); //1 } outer(); |
می بینیم در این مثال تابع outer به scope تابع inner دسترسی دارد و حاصل جمع را به ما نشان میدهد.اما اگر در تابع outer بخواهیم مقدار b را نمایش دهیم با error مواجه میشویم.
به این دلیل است که تابع outer به متغیرهای scope تابع inner دسترسی ندارد.
برای درک بیشتر به یک مثال دیگر می پردازیم :
مثال :
1 2 3 4 5 6 7 |
const message = "hello"; console.log(message); //hello { const message = "world"; console.log(message); // world } console.log(message); //hello |
در این مثال میبینیم که در خروجی اول عبارت hello چاپ شده اما در خروجی دوم world چاپ شده اما چون در scope دیگر با همین نام به آن مقدار دیگری داده شده مفدار آن متفاوت است. و اگر دوباره خروجی بگیریم از message میبینیم که دوباره عبارت hello چاپ می شود.
پیشنهاد : اگر قصد یادگیری جاوا اسکریپت (javascrip) به صورت تخصصی رو دارید، پیشنهاد میکنم دوره آموزش مقدماتی تا پیشرفته جاوا اسکریپت (کاملا پروژه محور) رو مشاهده کنید.
دیدگاهتان را بنویسید