2016-04-19 66 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]() 
} 
..... 
} 

多指派和語句是獨立的嗎?這將解釋它。但是在任務結束時缺少什麼分號? 良好做法/不良做法?

+5

嗯,是不是隻是普通的老JavaScript,由有破損的鍵盤*(缺少分號)的人編寫* – adeneo

+0

所有3個設置相等,我相信nextListeners。 –

+1

強烈建議您查看[MDN中的作業基礎知識](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Assignment_2)。 –

回答

0
var listeners = currentListeners = nextListeners 

是同樣的事情,這樣做:

var currentListeners = nextListeners; 
var listeners = currentListeners; 

希望這有助於

+1

從技術上說,不在當前範圍內聲明'currentListeners'。 –

+0

謝謝你;但多分配不是問題。分配和語句之間缺少分號,這讓我想知道是否有一些ES6/7功能在工作。從遠處看,缺少分號清楚地解釋了它,現在我很尷尬。 – user3213604

+0

@ user3213604缺少分號對此代碼的行爲沒有影響。 –

3

賦值運算符的計算結果爲任何已分配(有效右邊的操作數)。作爲副作用,它會更新左操作數的值。因此,a = b = c將c的值賦給b,評估爲c,然後將c的值賦給a,並計算爲c。

作業是右聯合的 - 它從右到左分組。

此外,語句之間的分號是[semi-]optional,如果每條語句都在它自己的行上(這裏有一些細節在鏈接中沒有被覆蓋)。

最後,這裏發生的一件有趣事情是賦值給一個範圍聲明的變量。 Javascript中的函數是聲明新範圍的一種方法。請注意,如果函數只是在代碼片段中定義,那麼在調用之前它不會影響currentListeners的值。