backend developer | telegram : @ali256reza
اسکوپ ها (scope) در جاوا اسکریپت
امروز می خوام scope ها در جاوااسکریپت رو به زبان ساده توضیح بدم.
معادل فارسی اسکوپ محدوده هست که مشخص می کنه هر متغیر در این زبان در چه محدوده ای قابل استفادست.
یعنی نمیشه همه جای محیط برنامه به یه سری متغیر ها دسترسی پیدا کرد.
- خب ما در کل توی جاوااسکریپت چهار نوع اسکوپ :
- Global scope
- Function scope (local scope)
- Lexical scope
- Block scope (ES6)
خب هر کدوم از این scope ها قواعد و ویژگی های مخصوص خودشون رو دارند، که به ترتیب توضیح میدم
Global scope
این اسکوپ تمام اسکوپ های برنامه رو در بر می گیره ، به عبارتی هر اسکوپی که شما می سازید زیر مجموعه این اسکوپ قرار می گیره
میشه گفت شهری که شما داخلش زندگی می کنید یه گلوبال اسکوپه و تمام خونه ها و مغازه های داخل شهر سایر اسکوپ ها هستند
در برنامه نویسی سمت کلاینت object window اسکوپ گلوبال محسوب میشه
نکته : object document گلوبال نیست و جزو زیر مجموعه window محسوب میشه
Block scope
ما با ساختن هر کدوم از این موارد یه block scope ساختیم:
- If, else statement
- Block scope {}
- Labled scope
- Try, catch
اگر متغیری رو با const یا let داخل بلاک اسکوپ تعریف (declare کردن) کنیم، داخل گلوبال اسکوپ قابل استفاده نیستند !
اما اگر متغیر ها رو تعریف نکنیم (مستقیما یه مقدار به متغیر بدیم بدون استفاده از var , let یا const) یا اون رو با var تعریف کنیم اون ها در گلوبال اسکوپ قابل استفاده هستند.
مثل لوازم خونه شما می مونه همه مردم شهر نمی تونند از لوازمی که توی خونه شما هست استفاده کنن اما اعضای خونه می تونن
نکته : اگر strict mode رو فعال کنید باید حتما متغیر ها رو تعریف کنید و نمی تونید مستقیم به اون ها یه مقدار بدین
Function scope (local scope)
خب این اسکوپ یکی از تفاوت هایی که داره اینه که توی این اسکوپ متغیر var متغیر گلوبال محسوب نمیشه اما شما می تونید متغیر رو بیرون این اسکوپ تعریف کنید (توی محیط برنامه ، گلوبال اسکوپ) و داخل اسکوپ به اون یه مقدار بدین و از اون توی اسکوپ گلوبال استفاده کنید
یا
می تونید متغیر رو تعریف نکنید ( از var , let , const استفاده نکنید) و مستقیما داخل تابع بهش یه مقدار بدید
نکته : برای استفاده از متغیر های function scope باید اول فانکشن رو صدا بزنید تا برنامه اون فانکشن رو اجرا کنه وگرنه هیچ متغیری وجود نخواهد داشت
Lexical scope
این ویژگی باعث میشه که هر اسکوپی به تمام متغیر های اسکوپ های بالا تر از خودش (اسکوپ هایی که خود اسکوپ زیر مجموعه اون حساب میشن) دسترسی پیدا کنه
مثال : هر عضو از خونه شما می تونه به امکاناتی که در شهر وجود داره دسترسی پیدا کنه
برای این که اسکوپ ها رو بفهمید باید خودتون کد های مختلف در اسکوپ های مختلف بنویسید و اسکوپ ها رو تست کنید!!
امیدوارم این پست براتون مفید بوده باشه :))
مطلبی دیگر از این انتشارات
آبجکت لیترالها در جاوا اسکریپت
مطلبی دیگر از این انتشارات
پرامیس ها در جاوااسکریپت | Promises in JavaScript
مطلبی دیگر از این انتشارات
مشکل نصب eslint