مقیاس

دامنه متغیرها در جاوا اسکریپت

اساطیر زبان

در این آموزش با دامنه متغیرها در جاوا اسکریپت (JavaScript) به کمک مثال های مختلف آشنا خواهید شد.

دامنه (Scope) یعنی اینکه متغیرها و توابع در چه قسمت هایی از کد قابل دسترس و استفاده هستند.

 


جاوا اسکریپت

توی این پک فوق العاده، جاوا اسکریپت رو جوری یاد میگیری که تو هیچ کلاس آموزشی یا پک دیگه ای نه دیدی نه شنیدی! بدون هیچ کلاسی، با جاوا اسکریپت اپلیکیشن بزن، پروژه محور یاد بگیر و حسابی پول در بیار! 


 

 


برنامه نویسی شبکه معماری کامپیوتر هوش مصنوعی و تجاری

توی این پک فوق العاده، صفرتاصد مبانی برنامه نویسی رو جوری یاد میگیری که تو هیچ کلاس آموزشی یا پک دیگه ای نه دیدی نه شنیدی! بدون هیچ کلاسی، با صفرتاصد مبانی برنامه نویسی اپلیکیشن بزن، پروژه محور یاد بگیر و حسابی پول در بیار! 


 

در جاوا اسکریپت یک متغیر دو نوع دامنه دارد:

  1. سراسری (Global)
  2. محلی (Local)

دامنه سراسری

متغیری که در ابتدای برنامه یا خارج از یک تابع تعریف شود به عنوان یک متغیر با دامنه سراسری در نظر گرفته خواهد شد و به آن متغیر سراسری گفته می شود که در همه جای برنامه قابل دسترس است.

نمونه ای از یک متغیر سراسری را در مثال زیر می بینیم:

// برنامه چاپ یک متن

let a = “hello”;

function greet () {

console.log(a);

}

greet(); // hello

در این برنامه متغیر a در ابتدای برنامه تعریف شده و یک متغیر سراسری است. یعنی اینکه از متغیر a می توان در هر کجای برنامه استفاده کرد.

مقدار یک متغیر سراسری را می توان در داخل یک تابع تغییر داد. مثال،

// برنامه تغییر مقدار یک متغیر سراسری

let a = “hello”;

function greet() {

a = 3;

}

// قبل از فراخوانی تابع

console.log(a); // hello

// بعد از فراخوانی تابع

greet();

console.log(a); // 3

در این برنامه متغیر a یک متغیر سراسری است که مقدار اولیه آن برابر با hello است. دستور console.log(a) قبل از فراخوانی تابع greet همین مقدار را نمایش می دهد. با فراخوانی تابع greet مقدار متغیر a به مقدار ۳ تغییر می کند و در نهایت دستور console.log(a) بعد از فراخوانی تابع مقدار ۳ را نمایش می دهد.

نکته: بهتر است از به کار بردن متغیرهای سراسری اجتناب کنید چونکه مقدار متغیر در قسمت های مختلف برنامه قابل تغییر است و این می تواند نتایج ناشناخته و غیرقابل پیش بینی به وجود آورد.

در جاوا اسکریپت می توان یک متغیر را بدون تعریف استفاده کرد. اگر یک متغیر بدون تعریف استفاده شود آن متغیر به طور خودکار به یک متغیر سراسری تبدیل می شود.

مثال،

function greet() {

a = “hello”

}

greet();

console.log(a); // hello

در این برنامه متغیر a یک متغیر سراسری است.

اگر متغیر a درون تابع با دستور “let a = “hello تعریف شده بود، برنامه خطا نشان می داد. چون این تعریف متغیر a را به یک متغیر محلی تبدیل می کرد که فقط در درون تابع قابل دسترسی است.

استفاده از متغیر تعریف نشده و مقداردهی نشده نیز منجر به خطا می شود.

نکته: در جاوا اسکریپت strict mode یا “حالت سخت” وجود دارد که قابل تعریف نیز هست. در این حالت بدون تعریف متغیر نمیتوان از آن استفاده کرد.

دامنه محلی

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

مثال ۱: متغیر با محدوده محلی

// برنامه نمایش محدوده محلی یک متغیر

let a = “hello”;

function greet() {

let b = “World”

console.log(a + b); // helloWorld

}

greet();

console.log(a + b); // خطا

خروجی

helloWorld

Uncaught ReferenceError: b is not defined

در این برنامه متغیر a یک متغیر سراسری است و متغیر b یک متغیر محلی برای تابع greet است. متغیر b فقط در داخل تابع قابل دسترسی است و به همین دلیل با استفاده از متغیر b خارج از تابع، خطا در برنامه رخ می دهد.

let محدوده بلوکی دارد

کلمه کلیدی let برای تعریف متغیر دارای محدوده بلوکی است یعنی فقط در همان بلوکی که در آن قرار گرفته قابل دسترسی است.

مثال ۲: متغیر با محدوده بلوکی

// برنامه نمایش مفهوم محدوده بلوکی

// متغیر سراسری

let a = ‘Hello’;

function greet() {

// متغیر محلی

let b = ‘World’;

console.log(a + ‘ ‘ + b);

if (b == ‘World’) {

// متغیر با محدوده بلوکی

let c = ‘hello’;

console.log(a + ‘ ‘ + b + ‘ ‘ + c);

}

// قابل دسترس نیست c متغیر

console.log(a + ‘ ‘ + b + ‘ ‘ + c);

}

greet();

خروجی

Hello World

Hello World hello

Uncaught ReferenceError: x is not defined

در برنامه بالا متغیر،

  • a یک متغیر سراسری است و در همه جای برنامه قابل دسترسی است.
  • b یک متغیر محلی است و فقط در داخل تابع greet قابل دسترسی است.
  • c یک متغیر با محدوده بلوکی است و فقط در داخل بلوک دستور if قابل دسترسی است.

بنابراین دو دستور console.log() اول بدون هیچ مشکلی کار می کنند.

اما با استفاده از متغیر c در دستور console.log(a + ‘ ‘ + b + ‘ ‘ + c); بعد از بلوک if برنامه خطا می دهد.

نکته: در جاوا اسکریپت var محدوده تابعی (function scoped) دارد و let دارای محدوده بلوکی (block scoped) است. اگر در داخل بلوک دستور if به جای let c = ‘hello’; از کد var c = ‘hello’; استفاده شود، خطای رخ نمی دهد. زیرا تعریف متغیر c با کلمه کلیدی var آن را تبدیل به یک متغیر با محدوده تابعی می کند پس در نتیجه در کل تابع greet قابل دسترس است. ولی خارج از تابع استفاده از متغیر c نیز منجر به خطا می شود.

تفاوت پک های حرفه ای ما با آموزشهای رایگان: بطور خلاصه از زمین تا آسمان! 1-پکها، جدیدترین نسخه نرم افزارها را آموزش می دهند با قابلیت های بسیار بیشتر. 2-پکها توسط متخصص آن نرم افزار، به صورت کاملا پروژه محور و با حل چالش هایی که در مسیر کار عملی و حرفه ای با آن روبرو می شوید تهیه شده اند و بعد از استفاده، کاملا برای بازار کار آماده اید! 3- متد این پکها کاملا کار شده و تا ماهها، در ذهن تان ماندگارند و یادگیری بسیار سریعتر و کاملتری خواهید داشت. آموزشهای رایگان فقط دستورات نرم افزارها را (آنهم ناقص) بیان می کنند و تازه برای ورود به بازار باید ماهها تجربه عملی هم کسب کنید !!

turned_in,

چرب زبان

با این اپلیکیشن ساده، هر زبانی رو فقط با 5 دقیقه در روز، توی 80 روز مثل بلبل حرف بزن! بهترین متد روز، تقویت حافظه، آموزش تصویری. یادگیری زبان کلید یادگیری هر مهارتی در قرن 21 !


حتما بخوانید!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست