2017-02-12 51 views
5

這是真的困惑了我在Javascript讀這句法:函數定義中「... args」(三個點)的含義是什麼?

router.route('/:id') 
.put((...args) => controller.update(...args)) 
.get((...args) => controller.findById(...args)); 

是什麼參數... args是什麼意思?

+2

'...'被稱爲擴散算子。 – bejado

+2

通常,'... args'表示「任何數量的值」。例如,你可以通過'null'或'1,2,3,4' - 這並不重要,而且該方法足夠聰明來處理它。 – Tigger

+1

這是ES6中引入的新語法。請參閱這裏的文檔 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/rest_parameters – Diode

回答

2

關於(...args) =>,...argsrest parameter。它總是必須是參數列表中的最後一個條目,並且它將被分配一個包含所有尚未分配給以前參數的參數的數組。

它基本上是arguments object的替代品。而不是寫

function max() { 
    var values = Array.prototype.slice.call(arguments, 0); 
    // ... 
} 
max(1,2,3); 

的,你可以寫

function max(...value) { 
    // ... 
} 
max(1,2,3); 

而且,由於箭頭的功能沒有一個arguments對象,這是創建可變參數(箭頭)功能的唯一途徑。


正如controller.update(...args),看到What is the meaning of "foo(...arg)" (three dots in a function call)?

8

從本質上講,什麼是正在做的是:

.put((a, b, c) => controller.update(a, b, c)) 

當然,如果我們想4個參數,或5或6?我們不想爲所有可能的參數數量編寫新版本的函數。

spread operator...)允許我們接受可變數量的參數並將它們存儲在一個數組中。然後,我們再使用擴運營商將它們傳遞到update功能:

.put((...args) => controller.update(...args)) 

這是透明的update功能,誰接收他們正常的參數。

+1

['...'不是運營商](http://stackoverflow.com/問題/ 37151966 /它是什麼 - 在ecmascript文件是它與傳播操作/ 37152508#37152508),它是與傳播無關。 –

相關問題