javascript अस्थायी मृत क्षेत्र क्या है?




ecmascript-6 const (3)

मूल रूप से लेट और कॉन्स्टेबल वेरिएबल के मामले में, टेम्पोरल डेड ज़ोन एक ज़ोन है

"आपके चर घोषित होने से पहले",

यानी जहाँ आप इन चरों के मूल्य तक नहीं पहुँच सकते हैं, यह एक त्रुटि फेंक देगा।

पूर्व।

let sum = a + 5;        //---------
//some other code       //         | ------>  this is TDZ for variable a
                        //         |
console.log(sum)        //---------
let a = 5;

उपरोक्त कोड एक त्रुटि देता है

जब हम वैरिएबल 'a' के लिए var का उपयोग करते हैं तो वही कोड एरर नहीं देगा।

पूर्व।

var sum = a;                            
console.log(sum)     //prints undefined
var a = 5;

मैंने सुना है कि आरंभिक होने से पहले let और const मानों को एक्सेस करने से ReferenceError हो सकता है क्योंकि कुछ को टेम्पोरल डेड जोन कहा जाता है।

लौकिक मृत क्षेत्र क्या है, यह गुंजाइश और उत्थापन से कैसे संबंधित है, और यह किन स्थितियों में सामना करना पड़ता है?


let और const में दो व्यापक अंतर हैं:

  1. वे ब्लॉक स्कोप हैं
  2. घोषित किए जाने से पहले var तक पहुँचना परिणाम को undefined ; इससे पहले कि यह घोषित किया जाता है एक let या const एक्सेस करना

console.log(aVar); // undefined
console.log(aLet); // causes ReferenceError: aLet is not defined
var aVar = 1;
let aLet = 2;

यह इन उदाहरणों से प्रकट होता है कि घोषणाएं (और const , जो उसी तरह से काम करती हैं) को hoisted नहीं जा सकता है, क्योंकि aLet को मान असाइन करने से पहले मौजूद नहीं दिखाई देता है।

हालांकि ऐसा नहीं है, हालांकि- let और कास्ट को फहराया जाता है (जैसे कि var , class और function ), लेकिन स्कोप में प्रवेश करने और घोषित किए जाने के बीच एक अवधि होती है जहां उन्हें एक्सेस नहीं किया जा सकता है। यह अवधि अस्थायी मृत क्षेत्र (TDZ) है

टीडीजेड तब समाप्त होता है जब aLet घोषित किया जाता है , बजाय सौंपा गया :

//console.log(aLet)  // would throw ReferenceError

let aLet;
console.log(aLet); // undefined
aLet = 10;
console.log(aLet); // 10

इस उदाहरण से पता चलता है कि let फहराया जाता है:

let x = 'outer value';
(function() {
  // start TDZ for x
  console.log(x);
  let x = 'inner value'; // declaration ends TDZ for x
}());

क्रेडिट: टेम्पोरल डेड ज़ोन (TDZ) ध्वस्त

आंतरिक दायरे में x एक्सेस करना अभी भी एक ReferenceError कारण बनता है। यदि फहराया नहीं गया था, तो यह outer value लॉग करेगा।

टीडीजेड एक अच्छी बात है क्योंकि यह बग को उजागर करने में मदद करता है - घोषित किए जाने से पहले एक मूल्य तक पहुंचना शायद ही जानबूझकर किया गया है।

TDZ डिफ़ॉल्ट फ़ंक्शन तर्कों पर भी लागू होता है। तर्क का मूल्यांकन दाएं से बाएं किया जाता है, और प्रत्येक तर्क TDZ में है जब तक कि इसे सौंपा नहीं गया है:

// b is in TDZ until its value is assigned
function testDefaults(a=b, b) { }
testDefaults(undefined, 1); // throws ReferenceError because the evaluation of a reads b before it has been evaluated.

TDZ को babel.js ट्रांसपाइलर में डिफ़ॉल्ट रूप से सक्षम नहीं किया गया है। REPL में इसका उपयोग करने के लिए "उच्च अनुपालन" मोड चालू करें। CLI या लाइब्रेरी के रूप में उपयोग करने के लिए es6.spec.blockScoping ध्वज की आपूर्ति करें।

आगे पढ़ने की सिफारिश की गई: TDZ ध्वस्त और ES6 Let, Const और डेप्थ में "टेम्पोरल डेड जोन" (TDZ)


उत्थापन:
const let , const , var सभी फहराया प्रक्रिया है।
(व्हाट्स का मतलब है कि वे ऊपरी तौर पर जाते हैं और दायरे के शीर्ष में घोषित होते हैं।)

initialisation:

  • var गो भी प्रारंभिक प्रक्रिया को फेंक देते हैं, और undefined प्रारंभिक मूल्य प्राप्त करते हैं।
  • हालांकि, const प्रारंभिक प्रक्रिया को फेंक नहीं दिया था, इसलिए उनके मूल्य अभी भी दुर्गम हैं, हालांकि वे पहले ही घोषित कर चुके हैं। व्हाट्स ने उन्हें temporal dead zone में डाल दिया

तो शीघ्र ही:

उत्थापन प्रक्रिया: var , let , const
प्रारंभिक प्रक्रिया: var







let