लोड हो रहा है...

स्ट्रिक्ट मोड

स्ट्रिक्ट मोड उन गलतियों को रोकता है जो पहले चुपचाप हो जाती थीं। "use strict" सबसे पहले रखो। फिर size = "regular" जब न let हो और न const, तो वैश्विक नाम नहीं बनता; ReferenceError आता है। इस पेज की पंक्ति ReferenceError है।

कामों की सूची और त्रुटि वाला पेज अलग हैं

कामों की सूची done: buy tea पर रुकी थी। त्रुटि वाले पेज ने जानबूझकर new Error("missing size") फेंका था, और catch ने वह संदेश पढ़ा। इस पेज पर तुम अपना Error नहीं फेंकते। इंजन फेंकता है, क्योंकि size कभी घोषित नहीं हुआ। console.error अब भी नहीं फेंकता।

निर्देश की जगह

"use strict" तभी काम करता है जब वह स्क्रिप्ट की पहली कथन हो, या एक फ़ंक्शन के अंदर पहली कथन हो। बाद की स्ट्रिंग कुछ नहीं बदलती। एक फ़ंक्शन सख्त हो सकता है और बाकी स्क्रिप्ट नहीं। मॉड्यूल पहले से सख्त होते हैं, इसलिए वहाँ निर्देश फ़ालतू है।

setSize क्या करता है

setSize, size को बिना घोषणा लिखता है। कॉल try के अंदर है। वैश्विक size नहीं बनता।

बिना घोषणा का लिखना

javascript
"use strict";
function setSize() {
size = "regular";
}
try {
setSize();
} catch (error) {
console.log(error.name);
}

लॉग में ReferenceError है। सुधार यह है: let size = "regular"। drink अगर tea हो और size घोषित हो, तो label tea / regular लौटा सकता है। order.size लिखना दूसरा ठीक रास्ता है, क्योंकि वह नाम मौजूद है।

नाम से कॉल और ऑब्जेक्ट पर कॉल

फ़ंक्शन को उसके नाम से बुलाने पर this सेट नहीं होता। स्ट्रिक्ट मोड में this undefined होता है। order पर मेथड बुलाने से this वही ऑब्जेक्ट बनता है, इसलिए this.drink tea है।

bare कॉल में this

javascript
"use strict";
function bare() {
return this;
}
const order = {
drink: "tea",
label() {
return this.drink;
}
};
console.log(bare());
console.log(order.label());

लॉग पहले undefined हैं, फिर tea। bare के अंदर this.drink मत पढ़ो। वहाँ कोई ऑब्जेक्ट नहीं, इसलिए वह पढ़ना फेंक देगा।

चार फ़र्क

बायाँ कॉलम पुराना खामोश व्यवहार है। दायाँ कॉलम निर्देश का असर है।

📊 निर्देश क्या बदलता है

पुराना खामोश व्यवहार "use strict" के साथ
बिना घोषणा size = "regular" वैश्विक नाम बनाता है ReferenceError
bare में this वैश्विक ऑब्जेक्ट है undefined
दोहरा पैरामीटर, आखिरी वाला रहता है SyntaxError
घोषित वेरिएबल पर delete false लौटाता है SyntaxError

दोहरा पैरामीटर, या delete size, स्क्रिप्ट पढ़ते समय असफल होता है। वह SyntaxError है, try उसे पकड़ नहीं पाता। असाइनमेंट वाला ReferenceError तब होता है जब फ़ंक्शन चलता है, इसलिए catch उसे देखता है। delete order.drink दोनों मोड में तब जायज़ है जब प्रॉपर्टी हटाई जा सके।

यह पेज

पेज एक सख्त स्क्रिप्ट है। असाइनमेंट असफल होता है और त्रुटि का नाम पेज पर लिखा जाता है।

पेज पर ReferenceError

html
<!DOCTYPE html>
<html>
<body>
<p id="line">…</p>
<script>
"use strict";
const line = document.querySelector("#line");
try {
size = "regular";
} catch (error) {
line.textContent = error.name;
}
</script>
</body>
</html>

पंक्ति ReferenceError पढ़ती है। done: buy tea नहीं। caught / missing size नहीं। size से पहले let लगाओ, तो यह catch चलना बंद हो जाता है।

पाँच छोटे अभ्यास

  1. "use strict" के नीचे setSize चलाओ। लॉग ReferenceError है।
  2. असाइनमेंट को let size = "regular" कर दो। फेंकना हट जाता है।
  3. bare() बुलाओ। मान undefined है।
  4. order.label() बुलाओ। मान tea है।
  5. पेज पढ़ो। पंक्ति ReferenceError है।

असल चूकें

  • निर्देश को किसी और कथन के बाद रखना
  • बिना घोषणा के असाइनमेंट से वैश्विक नाम की उम्मीद करना
  • bare कॉल के अंदर this.drink पढ़ना
  • दोहरे पैरामीटर को try से पकड़ना
  • पंक्ति को done: buy tea पढ़ना
  • पंक्ति को caught / missing size पढ़ना

यह याद रखो

  • निर्देश पहले
  • बिना घोषणा size = "regular" ReferenceError फेंकता है
  • bare में this undefined है और order.label() tea लौटाता है
  • दोहरे पैरामीटर और वेरिएबल पर delete, SyntaxError हैं
  • पेज की पंक्ति ReferenceError है

🧠 अपने ज्ञान की परीक्षा करें

शुरू करने के लिए तैयार

अपने ज्ञान की परीक्षा करें

इस इंटरैक्टिव क्विज़ के साथ अपनी चुनौती लें और देखें कि आप विषय को कितनी अच्छी तरह समझते हैं

❓
6
प्रश्न
🎯
70%
पास करने के लिए
♾️
∞
समय
🔄
∞
प्रयास

📝 निर्देश

  • हर प्रश्न को ध्यान से पढ़ें
  • हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
  • आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
  • आपकी प्रगति शीर्ष पर दिखाई जाएगी