برنامه نویسی

پشت کد: متغیرها و توابع

Hoisting یک مفهوم اساسی در جاوا اسکریپت است که اغلب افراد تازه وارد و حتی توسعه دهندگان باتجربه را گیج می کند. هدف این مقاله رفع ابهام از hoisting با توضیح اینکه چیست، چگونه کار می‌کند، و چگونه بر نحوه نوشتن و اشکال زدایی کد جاوا اسکریپت تأثیر می‌گذارد.

بالا بردن چیست؟

Hoisting رفتار پیش‌فرض جاوا اسکریپت برای انتقال اعلان‌ها به بالای محدوده حاوی آنها در مرحله کامپایل است. این بدان معناست که اعلان‌های متغیر و تابع قبل از اجرای هر کدی پردازش می‌شوند، بدون توجه به اینکه این اعلان‌ها در کجای کد منبع ظاهر می‌شوند.

چگونه بالابر کار می کند

بالابر متغیر

در جاوا اسکریپت، هر دو var و اعلامیه های عملکرد بالا می روند. با این حال، نحوه بالا بردن آنها متفاوت است.

بالا بردن با var

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

console.log(hoistedVar); // Output: undefined
var hoistedVar = "I am hoisted!";
console.log(hoistedVar); // Output: I am hoisted!
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال، اعلامیه var hoistedVar; به بالا بلند شده است، اما انتساب hoistedVar = "I am hoisted!"; در جای اصلی خود باقی می ماند

بالا بردن با let و const

متغیرهای اعلام شده با let و const نیز بلند شده اند، اما بر خلاف var، آنها با مقداردهی اولیه نمی شوند undefined. درعوض، آنها از ابتدای بلوک تا زمانی که با اعلان مواجه شود، در یک “منطقه مرده زمانی” (TDZ) باقی می مانند. دسترسی به این متغیرها قبل از اعلام منجر به a ReferenceError.

console.log(hoistedLet); // ReferenceError: Cannot access 'hoistedLet' before initialization
let hoistedLet = "I am not hoisted!";
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

عملکرد بالابر

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

hoistedFunction(); // Output: I am hoisted!
function hoistedFunction() {
 console.log("I am hoisted!");
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این حالت، کل اعلان تابع بالا می رود، بنابراین می توانید تابع را قبل از اینکه در کد ظاهر شود فراخوانی کنید.

عبارات تابع و توابع پیکان

عبارات توابع و توابع پیکان بلند نمی شوند. این توابع مانند متغیرهای اعلام شده با آن رفتار می کنند let یا const.

hoistedFunctionExpression(); // TypeError: hoistedFunctionExpression is not a function
var hoistedFunctionExpression = function() {
 console.log("I am not hoisted!");
};
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اینجا، hoistedFunctionExpression به عنوان یک متغیر بالا می رود، اما تا زمانی که تخصیص اجرا نشود، تعریف نشده است.

مفاهیم عملی بالا بردن

اجتناب از دام های رایج

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

// Bad practice
console.log(value); // Output: undefined
var value = 10;
// Good practice
var value;
console.log(value); // Output: undefined
value = 10;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

استفاده كردن let و const

ترجیح می دهند استفاده کنند let و const بر فراز var برای استفاده از محدوده بلوک و جلوگیری از مسائل مربوط به بالابر. این عمل منجر به کد واضح تر و قابل پیش بینی تر می شود.

if (true) {
 let blockScopedVar = "I am block scoped!";
 console.log(blockScopedVar); // Output: I am block scoped!
}
// console.log(blockScopedVar); // ReferenceError: blockScopedVar is not defined
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توابع و بالابر

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

// Function declaration
hoistedFunction();
function hoistedFunction() {
 console.log("This is a hoisted function!");
}
// Function expression
// nonHoistedFunction(); // TypeError: nonHoistedFunction is not a function
var nonHoistedFunction = function() {
 console.log("This is not a hoisted function!");
};
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه

Hoisting یکی از ویژگی های قدرتمند جاوا اسکریپت است که در صورت درک و استفاده صحیح می تواند منجر به کدهای موثرتر و قابل پیش بینی شود. با تشخیص اینکه چگونه اعلان‌های متغیر و تابع بالا می‌روند و انواع مختلف اعلان‌ها چگونه رفتار می‌کنند، می‌توانید از مشکلات رایج جلوگیری کنید و کد جاوا اسکریپت تمیزتر و قابل نگهداری‌تری بنویسید. همیشه به یاد داشته باشید که متغیرها و توابع خود را در ابتدای محدوده مربوطه خود اعلام کنید و ترجیح دهید let و const بر فراز var برای کاهش خطر رفتار غیر منتظره

نوشته های مشابه

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

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

دکمه بازگشت به بالا