مفهوم اسکوپ (Scope) در جاوا اسکریپت

سلام من غزلماین اولین نوشته من اینجاست. نمیدونم چرا برای اولین پست، این موضوع رو انتخاب کردم:) ولی بالاخره باید از یه جایی شروع کرد:)جاوااسکریپت یه مفهومی داره به اسم اسکوپ (scope). اسکوپ ها در در واقع انواع درسترسی variable ها به قسمت های مختلف کد رو مشخص میکنن.سه مدل scope وجود داره:1. Block scope2. Function scop3. Global scopeBlock Scope:اولین مدل اسکوپ ها، Block Scope ها هستن که با معرفی متغیرهای (let, var) ES6، به جاوا اسکریپت اضافه شدن. تو این مدل، هر قطعه کدی که بین {} قرار میگیره، یه بلاک از اسکوپ محسوب میشه و متغیری که داخل این اسکوپ قرار میگیره، فقط داخل خود scope قابل دسترسیه و از بیرون بهش دسترسی ای وجود نداره.{ let x = 2; } // x can NOT be used hereنکته ای که وجود داره، اینه که، متغیر var که تو ورژن قبلی جاوااسکریپت تعریف شده، این خاصیت رو نداره و خارج از block هم میشه بهش دسترسی داشت.Function Scope:تو این حالت هر function که ساخته میشه، یه اسکوپ به وجود میاره. و هر متعیر داخل هر function، فقط داخل همون function ( اسکوپ ) قابل دسترسیه و در واقع این متغیر برای function یه متغیر local محسوب میشه.function myFunction() { var carName = &quotVolvo&quot // Function Scope // code here CAN use carName } // code here can NOT use carName تو مثال بالا، دسترسی به متغیر carName فقط داخل function وجود داره. این قضیه در مورد متغیر های var, let, const صدق میکنه.اگه لازم داشتیم میتونیم از اسم متغیرهایی که بصورت local تعریف میشن، در جای دیگه هم استفاده کنیم و تداخلی بوجود نمیاد. متغیر های local، با شروع شدن عملکرد function بوجود میان و با تموم شدنش، از بین میرن.Global Scope زمانیکه که یک متغیر خارج از function تعریف میشه. به این متغیر global گفته میشه. و به اسکوپی که این متغیر داخلش قرار داره Global scope گفته میشه.(در واقع این اسکوپ بدنه اصلی برنامه محسوب میشه) به این معنی که میشه از همه قسمتهای کد بهش دسترسی داشت. let carName = &quotVolvo&quot // code here can use carName function myFunction() { // code here can also use carName }این قضیه در مورد متغیر های var, let, const صدق میکنه.تو جاوا اسکریپت، object ها و functionها هم متغیر محسوب میشن.اگه متغیری در جایی تعریف (declaration) نشه ولی مقدار دهی (assign) بشه، تو این حالت بعنوان یه متعیر Global در نظر گرفته میشه.myFunction(); // code here can use carName function myFunction() { carName = &quotVolvo&quot } تو جاوا اسکریپت، محیط کلی کد، اسکوپ global محسوب میشه و تو html، آبجکت window اسکوپ global محسوب میشه.طول عمر (Life Time ) متغیر ها:مدت زمان وجود یک متغیر از زمانی که متغیر بوجود میاد، شروع میشه.متغیر های local که در فانکشن ها تعریف میشن، با تمام شدن عملیات function از بین میرن.متغیر های Global که در بدنه کلی کد تعریف میشن، با بستن tab یا window از بین میرن.پارامترهای ورودی یه فانکشن (arguments)، بعنوان متغیر های local در نظر گرفته میشن. بصورت کلی توصیه میشه که از متغیر های Global تا حد امکان استفاده نشه. به خاطر اینکه دسترسی بهشون بالاست و تقریبا از همه قسمت های کد قابل تغییر و دستکاری هستن، ممکنه overwite بشن و در نتیجه مشکل بوجود بیارن.خب اینم از اولین نوشته ام. اگه خوندینش بهم بگین چقدر براتون ملموس بود و این مدل پستا چقدر کمک کننده است. راستش هدفم ساده سازی یه سری مطالب مخصوصا برای افراد تازه وارده و البته یادآوری برای خودم. مثل یه دفترچه یادداشت کوچیک :)راستی این نوشته برگرفته از چند تا مقاله و سایت آموزشیه که خوندم. که اصلی ترینش w3schools میباشد:)(خدایی مرجع اول و آخر همه مونه مگه نه؟ )برنامه نویسی