在JavaScript中返回NaN和Undefined

时间:2017-07-29 13:31:22

标签: javascript scope

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

我知道这是一个范围问题。请帮忙。

4 个答案:

答案 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