2016-04-06 18 views
1
yeni ben ES6 temporal ölü bölgeleri hakkında okuyorum ve ECMAScript'te 2015 (ES6) için am

:ECMAScript 2015 Temporal Ölü Bölge

if(typeof x === "undefined") { 
    console.log("x doesn't exist or is undefined"); 
} else { 
// safe to refer to x.... 
} 
let x = 5; //script.js:1 Uncaught ReferenceError: x is not defined 

Açıkçası ES6 size typeof ile bir değişken sınamak eğer ilan etmeden önce o hataları atar

console.log(typeof x); 
let x = 5; //script.js:1 Uncaught ReferenceError: x is not defined 

Bu neden oluyor? Bu bir hata mı? gittiği yoldur

+1

İlgili kodu okuyabilir ve kapsamda beyan edilip edilmediğini görebilirsiniz. Bu her zaman statik olarak belirlenebilir (programcı veya araçları tarafından), bunu dinamik olarak yapmak için (ve hiçbir şekilde) gerek yoktur. – Bergi

+0

Arcana için endişelenmeyi bırakın ve iyi programların nasıl yazılacağına odaklanın; bunların bir yönü, değişkenlerinizin kapsamının en üstünde olduğunu beyan etmektir. –

cevap

4

:

Temporal dead zone and errors with let

ECMAScript'e 2015'de, let bloğun üstüne değişken demirlenir. Bununla birlikte, değişken bildiriminden önce blokta değişkene başvurmak, bir ReferenceError sonucunu verir. Değişken, deklarasyon işlenene kadar bloğun başlangıcından "geçici ölü bölge" dir. "* Bir değişkeni * test ederseniz *" - kesinlikle bunu yapmak için bir sebep yok.

+0

Değişkeni tanımlanmadan önce kullanamazsam (ki bu bariz), bir değişkenin tanımlanıp tanımlanmadığını nasıl kontrol edebilirim? – Combine

+1

açıkça bir problemdir, bildirilen değişkenler başka bir değer uygulanana kadar tanımlanmamış tiptedir. En iyi tavsiye, mümkün olan en kısa sürede tanımlanamayan, belki de boş olan bir değer kullanmaktır. –