2017-03-13 1 views
3

を使用する場合は、次のコードは、私がFirefoxの52スクラッチパッドでそれを実行し、エラーを生成します。スコーピングの問題Firefoxのスクラッチパッドにしましょう

function scope() { 
    let x = 1; 
} 

let x = 2; 

/* 
Exception: SyntaxError: redeclaration of let x 
@Scratchpad/8:1:1 
*/ 

ことを説明するためにどのように?最初のxは関数にカプセル化し、2番目の宣言に干渉しないようにする必要があります。

このコードをChromeでスニペットとして実行するか、またはFirefoxで<script>タグを含むHTMLページ内で実行しても例外は発生しません。関数内にラップするか、さらには{}のペアをラップすることで問題は解決されます。

Scratchpadのバグではありますか?

答えて

2

1回だけ実行すると機能します。 2回目の同じコードを試しても、元のlet x = 2;はまだ生きています。

+0

意味があります。ありがとうございました! –

+0

さらに、https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/deleteで宣言した変数を削除することはできません。 –

+0

これは多かれ少なかれこの質問の重複です... http://stackoverflow.com/questions/36398258/typeerror-redeclaration-of-let-error-in-firebug-console-if-running-es6-コード –

関連する問題