hoisting و use strict در جاوا اسکریپت


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

یکی از چیزهای عجیب غریب توی جاوا اسکریپت، hoisting هست. هنگام استفاده از var، متغیرها را میتونیم قبل از تعریف کردن،استفاده کنیم. خوب ، می دونم ، برای هر کسی که به هر زبان برنامه نویسی غیر از JavaScriptبرنامه نویسی کرده باشه ، فوق العاده عجیب به نظر می رسه. آنچه اتفاق می افتد این است که ، تمام تعریف متغیرهایی که با استفاده از varانجام می شوند "hoisted"میشوند و یا در بالای دامنه فعلی قرار می گیرند.

بیاید چنتا مثال باهم ببینیم

hoisting in JS
hoisting in JS


برای مثال اول ، ما به عنوان خروجی خطایی یا undefinedدریافت نمی کنیم ، زیرا var x در بالا hoistedمی شود و اینطوری JS متوجه میشه که متغیر اون بالا تعریف شده.

نکته!
hoisting ،،فقط برا تعریف متغیر کار میکنه و برای initialize کردن کار نمیده.

به مثال زیر توجه کنید.

hoisting in JS
hoisting in JS


hoisting in JS
hoisting in JS


تو مثال بالا هم x تعریف شده و hoisting برای اون کار میکنه اما initialize نشده و برای همین تو خروجی undefined میده .

برای تعریف متغیر با let و const این موضوع یعنی همون hoisting مطرح نیست.

اگر یادتون باشه تو پست آموزشی اولمون هم گفتیم که function expression ها hoisting براشون کار نمیده.
علاوه بر این،class ها هم توی جاوا اسکریپت،hoisting براشون کار نمیده.

پرهیز از hoisting

درسته که hoisting فانه و شاید کارِ تعریف متغیر ها رو یه ذره آسون کنه اما ممکنه خیلی جاها برامون دردسر درست کنه و برا همین برای چشم پوشی از hoisting میتونیم کارهای زیر رو انجام بدیم:

1- میتونیم از strict mode استفاده کنیم . یعنی وقتی میخوایم کد بنویسیم اون بالای صفحه ادیتورمون بنویسیم:

“use strict”

این strict mode اجازه نمیده که از متغیری که هنوز تعریف نکردیم،استفاده کنیم.

2- با استفاده از const و let تعریف متغیر رو انجام بدیم.همونطور که گفتیم hoisting برای این دوتا کار نمیکنه و برا همین حتی اگرم بخوایم نمیتونیم از یه متغیر قبل از اینکه تعریف بشه استفاده کنیم.

3- سومین روش و شاید راحت ترین روش اینه که کار خودمون راحت کنیمو همه متغیرها رو اون بالا تعریف کنیم :)


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