2016-04-04 4 views
5

私はES6を学習していますので、どうかお願いします。私は実行ボタンを1回クリックすると、次のTypeError:ES6コードを実行している場合、Firebugコンソールのletエラーの再宣言

は、細かい実行されているコードですが、2番目のヒットにはTypeError: redeclaration of let myArrエラーを示す開始します。

この奇妙な(おそらくそうではない)動作について教えてください。

let myArr = [34,45,67,2,67,1,5,90]; 
let evenArr = []; 
let oddArr = []; 
myArr.forEach(x => { 
    if (x % 2 === 0) { 
     evenArr.push(x); 
    } else { 
     oddArr.push(x); 
    } 
}); 

console.log(evenArr); 
console.log(oddArr); 

エラー -

redelaration of let error

答えて

7

ES6 does not allowあなたは(同じスコープ内で再宣言ブロックスコープ変数)これを行うには:

let foo; 
let foo; 

を、コンソールからあなたがページをリロードするまで状態を保持します(あなたはページのコンテキスト内にあります)。初めてrあなたはmyArrを定義するので、2回目の実行でそれを再定義することはできません。

+0

しかし、私が 'let'を' var'に変更してヒットしても、エラーを表示しているのはなぜですか(リフレッシュしなくても) – Nesh

+0

'let'はブロック内の変数を定義します。 'var'を使って再定義することで関数のスコープに持ち込むことができれば、それは非常に奇妙な(そして意図していない可能性が高い)でしょう。 – ThiefMaster

+1

私は同じ質問があります。私はあなたの答えを読んで、 'let 'について少しの研究をしましたが、私はまだそれを理解するのが難しいです。あなたが言ったところでは、変数を 'let'で定義し、それを' var'に変更することでエラーになりました。しかし、私の場合は、最初から 'var'で始まっていますが、私は' let'を使用していなくても同じエラーが出ます。 –

関連する問題