ES6 में "सख्त उपयोग" का उपयोग करने के लिए अनुशंसित नहीं है?


200

मैं अभी तक ECMAScript 6 से परिचित नहीं हूँ। मैंने सिर्फ रिएक्टर स्टार्टर किट रेपो का क्लोन तैयार किया है, जो एप्लीकेशन कोड के लिए ES6 का उपयोग करता है। मुझे यह देखकर आश्चर्य हुआ कि लिंटर निर्देश के निषिद्ध घटनाओं के लिए कॉन्फ़िगर किया गया है use strict, जो मुझे लगा कि पूर्व-ईएस 6 जावास्क्रिप्ट में अनुशंसित था। तो क्या बात है?



जवाबों:


257

ES6 मॉड्यूल हमेशा सख्त मोड में होते हैं। युक्ति के प्रासंगिक भाग को उद्धृत करने के लिए :

10.2.1 सख्त मोड कोड

एक ECMAScript स्क्रिप्ट वाक्य रचना इकाई को अप्रतिबंधित या सख्त मोड सिंटैक्स और शब्दार्थ का उपयोग करके संसाधित किया जा सकता है। निम्नलिखित स्थितियों में कोड को सख्त मोड कोड के रूप में समझा जाता है:

  • वैश्विक कोड सख्त मोड कोड है अगर यह एक निर्देश प्रस्ताव के साथ शुरू होता है जिसमें उपयोग सख्त निर्देश होता है (देखें 14.1.1)।
  • मॉड्यूल कोड हमेशा सख्त मोड कोड होता है।
  • ClassDeclaration या ClassExpression के सभी भाग सख्त मोड कोड हैं।
  • Eval कोड सख्त मोड कोड होता है अगर यह एक डाइरेक्टिव प्रोलॉग के साथ शुरू होता है जिसमें एक यूज़ सख्त निर्देश होता है या यदि कॉल करने के लिए eval एक डायरेक्ट इवेल होता है (देखें 12.3.4.1) जो कि सख्त मोड कोड में निहित है।
  • फंक्शन कोड सख्त मोड कोड है यदि संबंधित फ़ंक्शनडेकेलरेशन, फंक्शनएक्सप्रेशन, जेनरेटर डिक्लेरेशन, जेनरेटरएक्सप्रेशन, मेथडिफिनिशन, या एरोफंक्शन सख्त मोड कोड में समाहित है या यदि कोड जो फ़ंक्शन के [[ECMAScriptCode]] आंतरिक स्लॉट का निर्देशन निर्देशांक प्रस्ताव के साथ शुरू होता है। जिसमें एक यूज सख्त निर्देश है।
  • फंक्शन कोड जिसे निर्मित फंक्शन और जेनरेटर कंस्ट्रक्टर्स के तर्कों के रूप में आपूर्ति किया जाता है, यदि अंतिम तर्क एक स्ट्रिंग है, जब संसाधित किया जाता है, तो एक फंक्शनबॉडी होती है जो एक डाइरेक्टिव प्रोलॉग के साथ शुरू होती है जिसमें एक यूज सख्त निर्देश होता है।

11
वैश्विक कोड और मॉड्यूल कोड के बीच अंतर क्या है? मुझे लगता है कि मैं गलत समझ रहा हूं, क्योंकि मेरे लिए मॉड्यूल कोड का मतलब मॉड्यूल में सब कुछ है। यदि मुझे आवश्यकता है ('मॉड्यूल')।
ओक्स

8
@BrynnMahsman ES2015 में देशी मॉड्यूल हैं। कॉमनजेएस सिर्फ एक पुस्तकालय है और इसका भाषा से कोई लेना-देना नहीं है।
किट सुंडे

18
आपके प्रतिक्रिया के लिए धन्येवाद। यदि यह आयात / निर्यात खोजशब्दों का उपयोग नहीं करता है तो क्या यह ES6 मॉड्यूल नहीं है? अभी मैं Node 4 का उपयोग कर रहा हूं और मेरे पास कीवर्ड आयात / निर्यात करने की पहुंच नहीं है और मैं डिफ़ॉल्ट रूप से सक्षम ES6 सुविधाओं के साथ ही कॉमनजस मॉड्यूल.एक्सपोर्ट्स और आवश्यकता () का उपयोग कर रहा हूं। यह समझाता है कि मुझे हर फ़ाइल के शीर्ष पर सख्त उपयोग क्यों करना है। तो तकनीकी रूप से मैं अभी भी V8 में सक्षम ES6 सुविधाओं के साथ CommonJS मॉड्यूल लिख रहा हूँ?
मेव्स ओके

7
"क्या यह एक मॉड्यूल है?" की एक विस्तृत परीक्षा के लिए। , देखें nczonline.net/blog/2016/04/… "... जबकि आयात या निर्यात की उपस्थिति एक मॉड्यूल का संकेत दे सकती है, आयात या निर्यात की कमी स्पष्ट रूप से इंगित नहीं करती है कि फ़ाइल एक मॉड्यूल नहीं है। इसलिए ऑटोडेट को कोई प्रभावी तरीका नहीं है कि एक फ़ाइल पार्सिंग के दौरान एक मॉड्यूल है। "
पीटीम

1
वास्तव में एक "मॉड्यूल" क्या है? मुझे strictत्रुटि ( AirBnB प्रीसेट के साथ ) एक स्क्रिप्ट पर मिलती है जिसमें केवल शामिल हैं "use strict"; console.log('foo')। क्या वह मॉड्यूल है?
डेन डैस्कलेस्क्यू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.