خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه عملکرد محدوده در جاوا اسکریپت

همه چیزهایی را که در مورد دامنه دانستن وجود دارد بیابید و درک بهتری از برنامه های پیچیده تر جاوا اسکریپت به دست آورید.

“Scope” به زمینه فعلی اجرا اشاره می کند که در آن کد شما می تواند مقادیر و عبارات را ارجاع یا “دیدن” کند. متغیرها، اشیاء و توابع از قسمت‌های مختلف کد بر اساس دامنه‌شان قابل دسترسی هستند.

در جاوا اسکریپت، متغیرها، اشیاء و توابع می توانند دارای یک محدوده جهانی، یک محدوده ماژول، یک محدوده بلوک یا یک محدوده تابع باشند.

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

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

به عنوان مثال، اعلام یک متغیر جهانی در یک فایل:

// index.js
let globalVariable = "some value"

یعنی هر اسکریپت دیگری در برنامه شما می تواند به آن دسترسی داشته باشد:

// otherScript.js
console.log(globalVariable) // some value

اعلام متغیرهای جاوا اسکریپت در گستره جهانی عمل بدی است زیرا می تواند منجر به آلودگی فضای نام شود. فضای نام جهانی، فضای بالای جاوا اسکریپت است که شامل متغیرها، اشیا و توابع است. در یک مرورگر، به شی Window متصل می شود، در حالی که NodeJS از یک شی به نام global استفاده می کند.

آلودگی فضای نام جهانی می تواند منجر به برخورد نام شود. این وضعیتی است که در آن کد شما سعی می کند از یک نام متغیر برای چیزهای مختلف در فضای نام یکسان استفاده کند. تصادم نام اغلب در پروژه های بزرگی که از چندین کتابخانه شخص ثالث استفاده می کنند، مواجه می شوند.

مطلب مرتبط:   کاربران را با استفاده از Sessions in Go وارد سیستم کنید

محدوده ماژول

یک ماژول یک فایل مستقل است که قطعات کد را برای ماژول های دیگر در یک پروژه کپسوله و صادر می کند تا مورد استفاده قرار گیرد. این به شما امکان می دهد تا پایگاه کد خود را به طور موثرتری سازماندهی و نگهداری کنید.

ES Modules الگوی ماژول جاوا اسکریپت را در جاوا اسکریپت در سال 2015 رسمی کرد.

متغیرهایی که در یک ماژول اعلام می‌کنید در محدوده آن ماژول قرار دارند، به این معنی که هیچ بخش دیگری از برنامه نمی‌تواند به آنها دسترسی داشته باشد.

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

در اینجا یک مثال است که صادرات یک کلاس را نشان می دهد:

// index.js
export class Foo {
constructor(property_1, property_2) {
this.property_1 = property_1
this.property_2 = property_2
}
}

و در اینجا نحوه وارد کردن آن ماژول و استفاده از ویژگی صادراتی آن آمده است:

// someModule.js
import { Foo } from &apos./index.js&apos

const bar = new Foo(&aposfoo&apos, &aposbar&apos)

console.log(bar.property_1) // foo

فایل ها به طور پیش فرض در جاوا اسکریپت به عنوان ماژول اعلام نمی شوند.

در جاوا اسکریپت سمت کلاینت، می توانید یک اسکریپت را به عنوان یک ماژول با تنظیم ویژگی type به ماژول در تگ اسکریپت اعلام کنید:

<script type="module" src="index.js"></script>

در NodeJS، می توانید یک اسکریپت را به عنوان یک ماژول با تنظیم ویژگی type روی module در فایل package.json خود اعلام کنید:

{
"type": "module"
}

Block Scope

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

متغیرهای اعلام شده در داخل یک بلوک با کلمات کلیدی let و const در محدوده آن بلوک قرار می گیرند، به این معنی که شما نمی توانید خارج از آن به آنها دسترسی داشته باشید. این محدوده برای متغیرهای اعلام شده با استفاده از کلمه کلیدی var اعمال نمی شود:

{ // Beginning of block
const one = &apos1&apos
let two = &apos2&apos
var three = &apos3&apos
} // End of block

console.log(one) // throws error

console.log(three) // "3"

متغیرهای محصور در بلوک بالا و اعلام شده به عنوان const یا let فقط در داخل بلوک قابل دسترسی هستند. با این حال، می توانید به متغیر اعلام شده با استفاده از کلمه کلیدی var در خارج از بلوک دسترسی داشته باشید.

محدوده عملکرد

متغیرهای اعلام شده در داخل یک تابع معمولاً به عنوان متغیرهای محلی نامیده می شوند و به تابع اختصاص داده می شوند. شما نمی توانید خارج از عملکرد به آنها دسترسی داشته باشید. این محدوده برای متغیرهای اعلام شده با کلمات کلیدی var، let و const اعمال می شود.

از آنجایی که متغیرهای اعلام شده در یک تابع محلی برای تابع هستند، نام متغیر را می توان دوباره استفاده کرد. استفاده مجدد از نام متغیرهای با محدوده تابع به عنوان سایه متغیر شناخته می شود و متغیر بیرونی به عنوان “سایه دار” شناخته می شود.

مثلا:

function multiply() {
let one = 1
var two = 2
const three = 3

return one * two * three
}

// Variable shadowing
const three = &aposthree&apos // Does not throw an error

درک قوانین محدوده حیاتی است

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

درک دامنه همچنین شامل مفاهیمی مانند آلودگی فضای نام جهانی است که می‌تواند کد شما را مستعد باگ‌ها کند.