2017-01-17 8 views
6

を宣言されています:スニペット - 識別子は、すでに私はスニペットChromeでこれを書いた

let commitPromotionData = (product) => new Promise((resolve, reject) => { 
    //Do something with the server 
    var statusCode = 200; 

    statusCode == 200 ? resolve(product) : reject(); 
}); 

をそして、私はそれを2回目を実行しようとすると、それは変数がすでに宣言されていると言うと、最初の行でエラーがスローされます。

エラーがある:これは

Uncaught SyntaxError: Identifier 'commitPromotionData' has already been declared at :1:1

そしてもちろん、これはコンソールのデフォルトの動作になりますが、ここではあまり意味がしていないようです。..

を意図していますか?これを回避する方法はありますか?

+0

を移動でき;' – harry123

答えて

6

letステートメントは、任意のスコープ内で変数を作成するためにのみ使用できます。あなたの例では、たとえChromeのスニペットを使用していても、letの文の直後にwindow.commitPromotionDataを出力すると、そこにあることがわかります。それはあなたのletステートメントが変数を割り当てるスコープです。同じスニペットを再実行すると、ウィンドウ内に同じ変数が作成され、文法エラーが発生します(here)。

あなたは2つの回避策があります。

  1. を明らかに最初はvar年代
  2. に任意のトップレベルlet文を変換したり、コードをラップするための新たなブロックスコープを作成することです。これは、たとえば、IIFEでコードをラップすることによって行うことができます(function(){ ... code ... })()
+3

これは[ブロック内のコードをラップすることによって、例えば、行うことができますステートメント](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/block#Block_Scoping_Rules) '{... code ...}' – yckart

3

エラーは、スコープ内で変数を2回宣言したことです。

ページをリロードまたはリフレッシュすると、新しいスコープが取得され、エラーは消滅します。

0

だけ)( `(関数(){//コード})の内部コードを置くES6に

;(() => { 
    console.log('local scope') 
}() 
関連する問題