۲۰ سپتامبر ۲۰۲۲

حالت مدرن، “use strict”

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

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

این موضوع تا سال 2009 که ECMAScript 5 (ES5) معرفی شد، ادامه داشت.ES5 قابلیت‌های جدیدی را به زبان افزود و اصلاحاتی را نیز بر روی امکانات فعلی انجام داد.

به منظور اینکه کدهای قدیمی کار کنند، بیشتر تغییراتی که در ES5 اتفاق افتاد، به صورت پیش‌فرض غیر فعال است، و برای فعال‌سازی آن‌ها باید از طریق عبارت "use strict" چنین کاری را انجام داد.

“use strict”

عبارتِ دستوریِ (directive) "use strict" یا 'use strict' شبیه به یک رشته است و زمانی که در ابتدای اسکریپت قرار می‌گیرد، تمام اسکریپت در حالت مدرن کار خواهد کرد.

برای نمونه :

"use strict";

// این کد از روش مدرن کار می‌کند
...

در مورد تابع‌ها (روشی برای گروه‌بندی دستورات، functions) در آینده خواهیم آموخت. در اینجا صرفا بدانید که می‌توانیم در ابتدای اکثر تابع‌ها "use strict" قرار دهیم تا قواعد مدرن صرفا بر روی کدهای داخل تابع اعمال شوند. اما معمولا برای تمام اسکریپت استفاده می‌شود.

از بالا بودن عبارت “use strict” در کدهای خود مطمئن شوید

این عبارت حتما باید در ابتدای اسکریپت شما باشد، در غیر این صورت حالت مدرن فعال نخواهد شد. Strict mode در اینجا فعال نیست :

alert("کد");
// نادیده گرفته می‌شود. باید در ابتدا باشد "use strict"

"use strict";

// فعال نشده است strict mode

فقط کامنت‌ها می‌توانند در بالای "use strict" قرار گیرند…

هیچ راه برای خنثی کردن use strict وجود ندارد

هیچ دستوری مانند no use strict وجود ندارد تا به موتور جاوااسکریپت دستور دهد به روش قدیمی کار کند. زمانی‌که use strict را قرار می‌دهیم، راه برگشتی وجود ندارد.

کنسول (console) مرورگر

در ادامه کار زمانی که از کنسول مرورگر خود برای اجرای کدها استفاده می‌کنید در نظر داشته باشید که این کنسول به طور پیش فرض از use strict استفاده نمی‌کند. گاهی اوقات زمانی که وجود use strict تفاوتی ایجاد می‌کند، استفاده از کنسول مرورگر نتایج اشتباهی به شما خواهد داد. حتی اگر از Shift+Enter برای وارد کردن عبارت use strict استفاده نمایید، نتیجه نخواهد داد.

راه حل قابل اتکا برای این موضوع آن است که به این شکل عبارت use strict را وارد نمایید :

(function() {
  'use strict';

  // ... کد شما ...
})()

آیا باید از “use strict” استفاده کنیم؟

این سوال ممکن است ساده بنظر برسد اما اینطور نیست.

شاید کسی پیشنهاد دهد که اسکریپت‌ها را همراه با "use strict" شروع کنید… اما می‌دانید چه چیزی جالب است؟

جاوااسکریپت مدرن از «کلاس‌ها» و «ماژول‌ها» – ساختارهای پیشرفته زبان (ما قطعا به آن‌ها خواهیم رسید) – پشتیبانی می‌کند که به طور خودکار use strict را فعال می‌کنند. پس ما نیازی نیست که دستور "use strict" را در صورت استفاده از آن‌ها اضافه کنیم.

پس اکنون "use strict" یک مهمان در ابتدای اسکریپت شما است. بعدا، زمانی که کد شما تماما شامل کلاس‌ها و ماژول‌ها می‌شود، می‌توانید آن را حذف کنید.

از هم اکنون، ما باید به طور کلی درباره use strict بدانیم.

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

تمام مثال‌ها درون این آموزش strict mode را تا زمانی که خلاف آن باشد (کم اتفاق می‌افتد) در نظر می‌گیرند.

نقشه آموزش