با عرض سلامو احترام خدمت کد ایتی های عزیز امیدواریم که حال دلتون خوب باشه.در ادامه سری مقالات جاوا اسکریپت این جلسه قصد داریم در رابطه با محدوده متغیرها در جاوا اسکریپت صحبت کنیم با ما همراه باشید.
محدوده متغیرها در جاوا اسکریپت
محدوده اشاره به در دسترس بودن متغیرها و توابع در بخش های خاصی از کد می باشد.
در جاوا اسکریپت یک متغیر دارای دو نوع دامنه میباشد:
- دامنه سراسری ( global scope)
- دامنه محلی (local scope)
دامنه سراسری (Global Scope)
متغیری که در بالای یک برنامه یا خارج از یک تابع اعلان شده است، یک متغیر با دامنه سراسری در نظر گرفته می شود.
بیایید نمونه ای از یک متغیر سراسری را ببینیم.
1 2 3 4 5 6 7 8 |
// program to print a text let a = "hello"; function greet () { console.log(a); } greet(); // hello |
در برنامه فوق، متغیر a در بالای یک برنامه اعلان شده و یک متغیر سراسری است. یعنی متغیر a را می توان در هر جایی از برنامه استفاده کرد.
مقدار یک متغیر سراسری را می توان در داخل یک تابع تغییر داد. مثلا:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// program to show the change in global variable let a = "hello"; function greet() { a = 3; } // before the function call console.log(a); //after the function call greet(); console.log(a); // 3 |
در برنامه فوق، متغیر a یک متغیر سراسری است. که مقدار ان ” hello ” میباشد. که از طریق تابع ()greet به متغیر a دسترسی پیدا کرده و مقدار آن را به 3 تغییر می هد. از این رو، مقدار a پس از تغییر آن در داخل تابع تغییر می کند.
توجه: بهتر است در رابطه با استفاده از متغیرهای سراسری صرفه نظر نماییم زیرا مقدار متغیر سراسری می تواند در قسمتهای مختلف برنامه تغییر کند. که می تواند نتایج ناشناخته ای را در برنامه ایجاد نماید.
1 2 3 4 5 6 7 |
function greet() { a = "hello" } greet(); console.log(a); // hello |
در برنامه فوق، متغیر a یک متغیر سراسری است.
اگر متغیر با استفاده از let a = “hello” اعلان شود، برنامه خطا می دهد.
توجه: در جاوا اسکریپت،”strict mode” وجود دارد. که در آن یک متغیر بدون اعلان آن قابل استفاده نیست. برای کسب اطلاعات بیشتر در مورد سختگیری، از JavaScript Strict دیدن کنید.
دامنه محلی (local scope)
یک متغیر همچنین می تواند یک محدوده محلی داشته باشد، مثلا فقط در یک تابع قابل دسترسی باشد.
مثال 1: متغیر محدوده محلی
1 2 3 4 5 6 7 8 9 10 |
// program showing local scope of a variable let a = "hello"; function greet() { let b = "World" console.log(a + b); } greet(); console.log(a + b); // error |
خروجی:
1 2 |
<span style="color: #ff0000;"><samp><span style="color: #008000;">helloWorld</span> Uncaught ReferenceError: b is not defined</samp></span> |
let یک Block Scoped
کلمه کلیدی let دارای محدوده بلوکی است (متغیر فقط در بلوک جاری قابل دسترسی است).
مثال 2: متغیر با محدوده بلوکی
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// program showing block-scoped concept // global variable let a = 'Hello'; function greet() { // local variable let b = 'World'; console.log(a + ' ' + b); if (b == 'World') { // block-scoped variable let c = 'hello'; console.log(a + ' ' + b + ' ' + c); } // variable c cannot be accessed here console.log(a + ' ' + b + ' ' + c); } greet(); |
خروجی :
1 2 3 |
<samp><span style="color: #008000;">Hello World Hello World hello</span> <span style="color: #ff0000;">Uncaught ReferenceError: c is not defined</span></samp> |
در برنامه فوق , متغیر:
- a یک متغیر سراسری است. در هر جایی از برنامه قابل دسترسی است.
- b یک متغیر محلی است. فقط در داخل تابع greet قابل دسترسی است.
- c یک متغیر با محدوده بلوک است. فقط در داخل بلوک دستور if قابل دسترسی است.
از این رو، در برنامه فوق، دو () console.log اول بدون هیچ مشکلی کار می کنند.
دیدگاهتان را بنویسید