调用函数而不在Javascript中输入其参数
我正在尝试创建一个名为PIG的老式骰子游戏的JavaScript版本。它包括掷骰子和记录每次掷骰子的总数。我需要能够在一个函数中保存每个卷,然后能够调用所述函数返回当前卷分数调用函数而不在Javascript中输入其参数,javascript,Javascript,我正在尝试创建一个名为PIG的老式骰子游戏的JavaScript版本。它包括掷骰子和记录每次掷骰子的总数。我需要能够在一个函数中保存每个卷,然后能够调用所述函数返回当前卷分数 此方法获取当前卷的金额,并将其存储到变量total中,然后返回当前总额变量 function rollTotal(amount) { return amount; } 我首先调用该函数并将掷骰子的分数插入amount参数 var dieOne = 1; var dieTwo = 2; rollTotal(
此方法获取当前卷的
金额
,并将其存储到变量total中,然后返回当前总额
变量
function rollTotal(amount) {
return amount;
}
我首先调用该函数并将掷骰子的分数插入
amount
参数
var dieOne = 1;
var dieTwo = 2;
rollTotal(dieOne + dieTwo);
然后我调用函数返回当前分数,如下所示
rollTotal()
我得到这个
undefined
如果调用时未输入参数,是否有方法设置默认参数以返回当前分数?当调用函数且未提供参数时,该参数将绑定到函数中未定义的。所以你可以这样做:
var currentAmount = undefined; // or perhaps 0?
function rollTotal(amount) {
if (typeof(amount) === 'undefined') {
return currentAmount;
} else {
currentAmount = amount;
return amount;
}
}
使用闭包可以更优雅(更安全)地执行此操作:
var rollTotal = (function() {
var currentAmount = undefined;
return function(amount) {
if (typeof(amount) === 'undefined') {
return currentAmount;
} else {
currentAmount = amount;
return amount;
}
};
}());
您可能还希望对参数进行更健壮的测试,并将任何非数字视为未定义。您可以通过以下测试执行此操作:
!isNaN(parseFloat(amount)) && isFinite(amount)
而不是专门针对未定义的进行测试
编辑:正如@Paul S.指出的,关于参数是否通过的最佳测试是arguments.length==0
一种常用的方法是使用类的实例
即:
function Dice() {
var amount;
this.rollTotal = function(_amount) {
// if an argument is supplied, assign it to the internal amount
if (typeof _amount !== "number") {
amount = _amount;
}
return amount;
};
}
用法示例:
var dice = new Dice();
dice.rollTotal(3);
console.log(dice.rollTotal());
在JavaScript中,您可以通过查看来检查调用函数时是否传递了参数。下面是如何检查调用函数时是否传递了任何参数
function rollTotal(amount){
if(arguments.length === 0)
return (a value when no arguments were passed);
else return amount;
}
为什么要使用函数?=
操作符工作正常
// initial setup
var rollTotal;
// set in the middle of an expression
"You just rolled " + (rollTotal = dieOne + dieTwo) + "!";
// recalling later in an expression
"Last time you rolled " + rollTotal + ", what will you get this time?";
amount=amount==null?defaultValue:amount
这没有意义rollTotal
不更新任何变量。这只是一个标识函数,因此rolltoal()
返回undefined
,而不是NaN
@Oriol谢谢提醒!这确实是我得到的,我只是发布了一个打字错误。我纠正了我的错误。下层选民愿意解释一下这里出了什么问题吗?你在读OP问题中我遗漏的东西吗?你可以做的另一个测试是arguments.length==0
,否则这个问题的IIFE版本基本上就是我想要的written@PaulS. - 是的,测试参数。长度可能是正确的方法。@TedHopp-谢谢!这就行了。我忘了这个选项。你得到了答案。最近的投票人愿意解释他们的理由吗?你为什么要检查参数[0]
是否存在而不是数量
?此外,问题中概述的函数并不是掷骰子,它只是保存了一个值。