先前参数的默认值

时间:2018-10-30 10:05:19

标签: javascript ecmascript-6

这是一个棘手的问题。如果前面的参数具有默认值,如何将值传递给最后一个参数?

$(document).ready(() => {
  ...
});
function sum(a=10, b=7, c){
	return a+b+c;
}

document.getElementById("result").innerHTML = sum(10);

我希望将10个分配给 c ,并作为3个值的

4 个答案:

答案 0 :(得分:1)

您可以使用命名参数(解构分配)。基本上,您的函数接收一个对象,您仍然可以设置默认值并仅传递所需的属性。使用这种方法,属性的顺序根本不重要。您可以致电sum({ c: 2 })sum({ a: 3, c: 4}) ..或其他任何方式。

进一步阅读:http://2ality.com/2011/11/keyword-parameters.html

function sum({a=10, b=7, c}){
	return a+b+c;
}

document.getElementById("result").innerHTML = sum({ c: 10 });
<div id="result"></div>

关于其他答案的说明:恕我直言,将像undefined或null这样的虚假值作为参数传递,使函数非常不一致且难以测试。这就是为什么如果我知道出于x的原因可能不需要某些字段的原因,那么我将使用命名参数。

答案 1 :(得分:1)

显式传递class Game { private final int minAge; private final Player[] players; public Game(int numberOfPlayers, int minAge) { //create array of the correct size, it will be filled with nulls this.players = new Player[numberOfPlayers]; this.minAge = minAge; } void addPlayer(Player player) { int nextFreeSlot = getNextFreeSlot(); if (nextFreeSlot > 0) { if (isEligible(player)) { if (!isAlreadyPlaying(player)) { players[nextFreeSlot] = player; } else { // Already playing } } else { // Ineligible } } else { // Full } } private boolean isAlreadyPlaying(Player newPlayer) { for (Player player : players) { if (player.getId() == newPlayer.getId()) return true; } return false; } private int getNextFreeSlot() { for (int i = 0; i < players.length; i++) { if (players[i] == null) return i; } return -1; // negative indicates there's no free slot } private boolean isEligible(Player player) { return player.getAge() > minAge; } } 以获得默认值:

undefined

答案 2 :(得分:0)

您可以声明为:function sum(c, a=10, b=7),然后使用:sum(10)

function sum(c, a=10, b=7){
	return a+b+c;
}

document.getElementById("result").innerHTML = sum(10);
<div id="result"></div>

答案 3 :(得分:0)

function sum(a , b = 10, c=7) {
  return a + b + c;
}