محدوده متغیر

متغیرها در جاوااسکریپت دارای محدوده هستند. محدوده یک متغیر به شما می‌گوید که در کجای برنامه می‌توان از متغیر استفاده کرد و یا متغیر قابل دسترسی است. به عنوان مثال متغیری که در داخل یک تابع تعریف می‌شود فقط در داخل بدنه تابع قابل دسترسی است. می‌توان دو متغیر با نام یکسان در دو تابع مختلف تعریف کرد. برنامه زیر این ادعا را اثبات می‌کند :

 1: function firstLocalVariable()
 2: {
 3:     var number = 10;
 4:     console.log(number);
 5: }
 6: 
 7: function secondLocalVariable()
 8: {
 9:     var number = 5;
10:     console.log(number);
11: }
12: 
13: firstLocalVariable ();
14: 
15: secondLocalVariable ();
10
5

مشاهده می‌کنید که حتی اگر ما دو متغیر با نام یکسان تعریف کنیم (خطوط 3 و 9) که دارای محدوده‌های متفاوتی هستند، می‌توان به هر کدام از آنها مقادیر مختلفی اختصاص داد. متغیر تعریف شده در داخل تابع firstLocalVariable() هیچ ارتباطی به متغیر داخل تابع secondLocalVariable() ندارد. وقتی به مبحث کلاسها رسیدیم در این باره بیشتر توضیح خواهیم داد. جاوااسکریپت دارای دو نوع محدوده است:

  • متغیرهای محلی (Local)
  • متغیرهای سراسری (Global)

متغیرهای محلی

متغیرهایی که داخل توابع تعریف می‌شوند محلی هستند و فقط داخل همان تابع قابل استفاده‌اند. به مثال زیر توجه کنید:

 1: function LocalVariable()
 2: {
 3:     var number = 10;
 4:     console.log(number);
 5: }
 6: 
 7: LocalVariable ();
 8: 
 9: console.log(number);
10
Uncaught ReferenceError: number is not defined

همانطور که مشاهده می‌کنید با فراخوانی تابع در خط 7 مقدار متغیر number چاپ می‌شود ولی در خط 10 که سعی در چاپ مقدار این متغیر داریم با پیغام خطا مواجه می‌شویم چون طول عمر این متغیر تا زمانی است که تابع به پایان نرسیده است. با پایان تابع متغیر و مقدار آن هم از بین می‌رود در نتیجه در خارج از تابع نمی‌توان مقدار آن را چاپ کرد.

متغیرهای سراسری

متغیرهایی که در بیرون تابع تعریف می‌شوند از نوع سراسری هستند. به مثال زیر توجه کنید:

 1: var firstNumber  = 10;
 2: var secondNumber = 5; 
 3: var Sum;              
 4: 
 5: function GlobalVariable()
 6: {
 7:     Sum = firstNumber + secondNumber;
 8: }
 9: 
10: GlobalVariable ();
11: console.log(Sum);
15

متغیرهای firstNumber و secondNember و Sum در بیرون تابع تعریف شده‌اند و از نوع سراسری هستند. از این نوع متغیرها را به راحتی می توان در هر جای برنامه، استفاده کرد.