Strict Mode संगतता
VM ऑब्फ़स्केशन को कंपाइल के समय पता होना चाहिए कि कोड strict mode में चलता है या नहीं। अगर आपका कोड strict mode के व्यवहार पर निर्भर है, तो आपको इसे स्पष्ट रूप से घोषित करना होगा।
क्यों? VM आपके कोड को चलने से पहले बाइटकोड में कंपाइल करता है। strict mode के लिए विशिष्ट व्यवहारों (जैसे this बाइंडिंग, डुप्लिकेट
पैरामीटर, arguments ऑब्जेक्ट का व्यवहार) के लिए सही बाइटकोड बनाने हेतु उसे कंपाइल के दौरान strict mode का संदर्भ पता होना चाहिए।
strictMode विकल्प नियंत्रित करता है कि ऑब्फ़स्केटर यह निर्णय कैसे ले। strictMode: null (डिफ़ॉल्ट) और strictMode: false के साथ, कोड को केवल वहीं strict माना जाता है जहाँ वह इसे घोषित करता है: एक स्पष्ट 'use strict'; डायरेक्टिव, ES मॉड्यूल सिंटैक्स, या क्लास मेथड्स। बाकी सब कुछ sloppy mode में कंपाइल होता है। strictMode: true पूरे इनपुट को strict मानता है। उसी संदर्भ से मेल बिठाएँ जिसमें अंतिम बंडल वास्तव में चलता है।
फ़ाइल-स्तर पर Strict Mode
पूरे कोड के लिए strict mode चालू करने हेतु अपनी फ़ाइल के शीर्ष पर 'use strict'; जोड़ें:
फ़ंक्शन-स्तर पर Strict Mode
अगर केवल कुछ फ़ंक्शन्स को strict mode चाहिए, तो उन विशिष्ट फ़ंक्शन्स के अंदर 'use strict'; जोड़ें:
आम समस्या: अगर आपका बंडलर या बिल्ड टूल 'use strict'; अपने आप जोड़ता है (उदाहरण के लिए ऐसा बंडलर जो
CommonJS या सामान्य स्क्रिप्ट सोर्स को strict-mode आउटपुट में लपेटता है),
लेकिन आप बंडलिंग से पहले सोर्स को ऑब्फ़स्केट करते हैं, तो VM को strict mode के बारे में पता नहीं चलेगा। या तो अपनी सोर्स फ़ाइलों में डायरेक्टिव
जोड़ें, strictMode: true सेट करें, या बंडलिंग के बाद ऑब्फ़स्केट करें।
