var currDice, totDice, dice, complete;
function moveIt(){
dice = Math.floor(Math.random()*6) + 1,
currDice = 40,
totDice = totDice+complete,
complete = dice * currDice
return totDice;
};
函数moveIt
返回NaN
。
它应该随机返回40到6的倍数并保持之前的值。
如果我删除它,则返回Undefined
。
我知道这是一个范围问题。请帮忙。
答案 0 :(得分:0)
您在初始化之前使用complete
!你可以交换你的代码行:
function moveIt(beforeTotal) {
var dice = Math.floor(Math.random()*6) + 1;
var currDice = 40;
var complete = dice * currDice;
var totDice = (beforeTotal || 0)+complete;
return totDice;
};
var total = moveIt();
console.log(total);
total = moveIt(total);
console.log(total);
我试着指出这种方法是如何工作的。
您可以在没有初始值的情况下调用此函数。然后(beforeTotal || 0)
为(undefined || 0)
并将评估为0
,这是JS逻辑,您可以获得一个骰子的结果。
如果您将值传递给此函数,它将用于向其添加complete
。通过1000并完成获得120,你得到1120。
所有其他变量仅在此功能中可用。
答案 1 :(得分:0)
初始化totDIce
未定义,当您向某些内容添加未定义时,您会获得投放到NaN
的值
function moveIt(){
//memoizing the mutable value as key of the function itself
moveIt.totDice = moveIt.totDice || 0;
// you might wanna wrap it with parseInt()/Math.floor()/Math.ceil()
var dice = Math.floor(Math.random()*6) + 1;
var currDice = 40;
var complete = dice * currDice;
var totDice = totDice+complete;
return moveIt.totDice ;
};
答案 2 :(得分:0)
var totDice;
将有undefined
,这就是您获得NaN
在第一行分配totDice = 0
...
同时移动complete = dice * currDice
行,因为complete
还没有值
var currDice, totDice = 0, dice, complete;
function moveIt(){
dice = Math.floor(Math.random()*6) + 1,
currDice = 40,
complete = dice * currDice,
totDice = totDice+complete
return totDice;
};
答案 3 :(得分:0)
您可以使用浏览器的集成控制台。
在Chrome中:工具> Javascript控制台。或者CTRL + SHIFT + J.您可以从代码中调用console.log并在那里观看,或者您可以使用Sources选项卡(位于面板顶部)。导航到该文件,单击它,您可以通过ckick行号在您想要的行中放置一个断点。
在Firefox中:工具>发展> Web控制台。或者CTRL + SHIFT + K. Yu可以像上面提到的那样进行调试。
您还可以使用Firebug等工具。见https://getfirebug.com/wiki/index.php/Script_Debugging