2016-04-06 8 views
1

私はECMAScriptの2015(ES6)に新しいですし、私はES6の時間的なデッドゾーンについて読んでいます:あなたはそれがエラーをスロー宣言する前にtypeof演算と変数をテストする場合ES6で明らかにECMAScriptの2015時間的なデッド・ゾーン

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 

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

どうしてですか?これはバグですか?

+1

"*変数をテストすると*" - それを行う理由は全くありません。関連するコードを読んで、スコープ内で宣言されているかどうかを確認するだけです。これは常に(プログラマまたは彼のツールによって)静的に決定できます。動的に行う必要はありません。 – Bergi

+0

Arcanaについて心配するのをやめ、良いプログラムを書く方法に焦点を合わせます。その1つの側面は、変数をスコープの先頭に宣言することです。 –

答えて

4

それが行く方法です:ECMAScriptの2015年に

Temporal dead zone and errors with let

letは、ブロックの先頭に変数をホイストします。ただし、変数宣言の前にブロック内の変数を参照すると、ReferenceErrorになります。変数はブロックの開始から宣言が処理されるまでの「一時的な不感地帯」にあります。

+0

"let"(明白です)で宣言される前に変数を使用できない場合、変数が定義されているかどうかをどのように確認できますか? – Combine

+1

明らかにその問題は、宣言された変数は、他の値が適用されるまで未定義の型からです。最良のアドバイスは、できるだけ早く未定義でない、おそらくヌルである値を使用することです。 –

関連する問題