这是一个棘手的问题。如果前面的参数具有默认值,如何将值传递给最后一个参数?
$(document).ready(() => {
...
});
function sum(a=10, b=7, c){
return a+b+c;
}
document.getElementById("result").innerHTML = sum(10);
我希望将10个分配给 c ,并作为3个值的和。
答案 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;
}