這是真的困惑了我在Javascript讀這句法:函數定義中「... args」(三個點)的含義是什麼?
router.route('/:id')
.put((...args) => controller.update(...args))
.get((...args) => controller.findById(...args));
是什麼參數... args是什麼意思?
這是真的困惑了我在Javascript讀這句法:函數定義中「... args」(三個點)的含義是什麼?
router.route('/:id')
.put((...args) => controller.update(...args))
.get((...args) => controller.findById(...args));
是什麼參數... args是什麼意思?
關於(...args) =>
,...args
是rest 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)?。
從本質上講,什麼是正在做的是:
.put((a, b, c) => controller.update(a, b, c))
當然,如果我們想4個參數,或5或6?我們不想爲所有可能的參數數量編寫新版本的函數。
spread operator(...
)允許我們接受可變數量的參數並將它們存儲在一個數組中。然後,我們再使用擴運營商將它們傳遞到update
功能:
.put((...args) => controller.update(...args))
這是透明的update
功能,誰接收他們正常的參數。
['...'不是運營商](http://stackoverflow.com/問題/ 37151966 /它是什麼 - 在ecmascript文件是它與傳播操作/ 37152508#37152508),它是與傳播無關。 –
'...'被稱爲擴散算子。 – bejado
通常,'... args'表示「任何數量的值」。例如,你可以通過'null'或'1,2,3,4' - 這並不重要,而且該方法足夠聰明來處理它。 – Tigger
這是ES6中引入的新語法。請參閱這裏的文檔 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/rest_parameters – Diode