2016-04-19 1 views
-2

ここにRedux.jsのサンプルがあります。私はgithubに寄付しています。誰かがここで使用されている構文を説明できますか?これはどのJavaScript構文ですか?

var currentListeners = [] 
var nextListeners = currentListeners 

.... 
someFunc() { 

// THIS: 
var listeners = currentListeners = nextListeners 
for (var i = 0; i < listeners.length; i++) { 
    listeners[i]() 
} 
..... 
} 

マルチ割り当てとfor文は独立していますか?それはそれを説明するだろう。しかし、割り当ての最後にセミコロンがないのは何ですか? 良い練習/悪い練習ですか?

+5

壊れたキーボード*(セミコロンがありません)*誰かが書いた普通の古いjavascriptではありません。 – adeneo

+0

3つはすべて同じに設定されています。 –

+1

[MDNの課題の基礎](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Assignment_2)をご覧になることを強くお勧めします。 –

答えて

0
var listeners = currentListeners = nextListeners 

これを行うことと同じことである。これは

+1

技術的には、 'currentListeners'は現在のスコープで宣言されていません。 –

+0

ありがとうございます。マルチアサインは問題ではありません。 assignとfor文の間にセミコロンがないため、ES6/7の機能が動作しているかどうか疑問に思っていました。遠くから、セミコロンの欠如はそれをはっきりと説明し、今私は恥ずかしいです。 – user3213604

+0

@ user3213604セミコロンがないと、このコードの動作に違いはありません。 –

3

代入演算子は、(効果的に右オペランド)が割り当てられているものは何でもと評価されたのに役立ちます

var currentListeners = nextListeners; 
var listeners = currentListeners; 

希望。副作用として、左のオペランドの値を更新します。したがって、a = b = cは、cの値をbに代入し、cと評価してから、cの値をaに代入し、cと評価します。

割り当ては右結合で、右から左にグループ化されます。

さらに、ステートメント間のセミコロンは、各ステートメントがそれ自身の行にある場合は[semi-]optionalです(リンクに記載されている詳細はここにありません)。

最後に、1つのスコープを宣言した変数への代入がここで行われます。 Javascriptの関数は、新しいスコープを宣言する1つの方法です。関数がスニペットで定義されているだけであれば、それが呼び出されるまではcurrentListenersの値には影響しません。

関連する問題