۰۱ شهریور ۱۳۹۹

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

متغیرها همانند سیم‌هایی هستن که به انواع مقدارها متصل می‌شوند به مثال انتصاب 'Narwhal' به متغیر pet توجه کنید.

let pet = 'Narwhal';
Just Javascript By Maggie Appleton

عملیات انتصاب یا =

در سمت چپ علامت = متغیر یا همان سیم ما با یک اسم مانند pet در مثال بالا قرار می‌گیرد و در قسمت راست یک مقدار ویا یک عبارت که حاصل اجرای آن عبارت توسط جاوااسکریپت محاسبه شده و در نهایت یک مقدار قرار می‌گیرد.

خواندن مقدار یک متغیر

در لحظه‌ی اجرای کد زیر مقدار متغیر pet محاسبه شده و برای متد log ارسال می‌شود. 

console.log(pet);

مقدار خروجی چاپ شده حاصل از اجرای کد زیر را شما حدس بزنید.

function double(x) {
  x = x * 2;
}

let money = 10;
double(money);
console.log(money); // ?

اگر فرض ما بر این بود که با اجرای متغیر money برای متد double ارسال می‌شود انتظار می‌رفت که مقدار آن دوبرابر شود ولی در حقیقت مقدار آن متغیر در آن لحظه ارسال می‌شود و نه خود متغیر.

برای بهتر شکل گرفتن مدل ذهنیتان به مثال زیر و مدل گرافیکی متناظر با آن توجه کنید.

let x = 10;
let y = x;
x = 0;
Just Javascript By Maggie Appleton
Just Javascript By Maggie Appleton
Just Javascript By Maggie Appleton

سعی کنید یک مدل ذهنی برای قطعه کد زیر تصور کنید

let isSad = true;
let isHappy = !isSad; // The opposite
let isFeeling = isSad || isHappy; // Is at least one of them true?
let isConfusing = isSad && isHappy; // Are both true?

.

.

.

.

آیا به درستی به نتیجه مشابه دست یافتید؟ باید توجه کنید که انواع مقادیر اولیه یا primitive در این مدل ذهنی ما منحصر به فرد هستن و صرفا یک مقدار true و یک مقدار false از نوع Boolean در دنیای جاوااسکریپت وجود دارد.

Just Javascript By Maggie Appleton

حال اجازه دهید به تفاوت بین مقادیر دسته‌ی primitive و objects and functions بپردازیم. یکی دیگر از تفاوت‌های دسته‌ی دوم علاوه بر قابل تغییر بودن آنها این است که می‌توان مقادیر جدیدی از آن در دنیای جاوااسکریپت تولید کرد که صرفا مانند مقادیر دسته‌ی primitive ثابت و یکتا نیستند. به مثال‌های زیر توجه کنید.

سعی کنید یک مدل ذهنی از کدهای زیر که عملیات انتصاب یک مقدار از دسته‌ی مقادیر primitive است را تصور کنید.

let sisters = 3;
let musketeers = 3;

حال مدل ذهنی انتصاب چند مقدار از نوع object که ما هر بار در هر خط با استفاده از {} یک نمونه جدید از آن را ایجاد کردیم مقایسه کنید.

سعی کنید حدس بزنید در هر کدام از  ۳ حلقه for زیر چه تعداد از نوع‌های متفاوت از مقادیر به متد console.log ارسال شد.

for (let i = 0; i < 7; i++) {
  console.log(2);
}
for (let i = 0; i < 7; i++) {
  console.log({});
}
for (let i = 0; i < 7; i++) {
  console.log(function() {});
}

وقتی حلقه اول ۷ مرتبه اجرا می‌شود، ۷ بار تنها یک مقدار 2 که از نوع primitive می‌باشد یعنی آن عدد 2 صرفا یک شیئ منحصربفرد در دنیای جاوااسکریپت است.

اما پس از اجرای حلقه دوم و سوم ۷ شیئ متفاوت و متمایز در دنیای جاوااسکریپت ایجاد شده و به متد console.log ارسال می‌شود.

فهرست مطالب `دنیای جاوااسکریپت`

نظرات خوانندگان این نوشته

تا به حال نظری ثبت نشد!

نظری در این مورد دارید؟ خوشحال می‌شم اون رو برام ارسال کنید.

captcha