【问题标题】:Why this javascript code give me Nan in the last line of output? I need the reason please为什么这个 javascript 代码在输出的最后一行给我 Nan?请问我需要理由
【发布时间】:2020-08-12 23:43:52
【问题描述】:

x = 4;
console.log(x);
var x = 10,
  y = 2;

function z(x) {
  while (x > 0) {
    if (x > 0) {
      break;
    } else {
      x = x - y;
      return z(x);
    }
    return x;
  }
}
console.log(x);
console.log(z(x) + z(x + y));

我需要解释最后一行的输出吗?,输出是NaN

【问题讨论】:

  • 你不会在所有路径上返回。
  • 当你跳出循环时,你不会return x;,因为它在循环内。也许你的意思是把那一行写下来?或将break 更改为return x
  • 代码没有意义。只有在x > 0 时才进入循环体,因此if 条件将始终为真。
  • @JeremyThille 错了,它适用于所有循环。
  • z(n) 始终未定义。将未定义的实体添加到任何其他实体会得到NaN。说明请参考this

标签: javascript


【解决方案1】:

因为 z(x) 和 z(x + y) 返回未定义。

【讨论】:

    【解决方案2】:

    它返回 NaN 是因为当您调用时...

    console.log(z(x)+z(x+y));
    

    并非函数中的所有路径都返回任何内容。事实上,在 if 块中,它只是中断并且什么都没有返回。

            if(x>0){
               break;
            }
    

    如果 x == 10 则 while 循环将中断并且不返回任何内容。您可以通过切换中断来解决此问题;返回 x;最终做同样的事情,但不返回 NaN。

            if(x>0){
               return x;
            }
    

    【讨论】:

      【解决方案3】:

      函数 z() 总是返回 undefined。所以:

      z(x) & z(x+y) are undefined
      

      Javascript 添加未定义的值返回 NaN。所以

      z(x) + z(x+y) is NaN
      

      【讨论】:

        【解决方案4】:
        function z(x) {
          while (x > 0) {
            if (x > 0) {
              break;
            } else {
              x = x - y;
              return z(x);
            }
            return x;
          }
        }
        

        对于这个函数,想想x === 10的情况。 while 条件是 true,所以我们输入它。下一个。我们到达if (x > 0),这是真的,所以break; 语句被命中。这打破了while循环,我们退出了没有返回值的函数。因此,z(x) 返回undefined

        z(x + y) 如果你遵循相同的逻辑,同样会返回 undefined。

        undefined + undefined === NaN

        【讨论】:

        • while 条件为x > 0,因此 if/else 语句毫无意义。 while 循环已经检查了每次迭代的条件。或许您应该解释一下您希望该函数做什么,以便我们权衡应该修改的内容。
        • 修改条件 if(x > 0) 为 if (x
        【解决方案5】:

        无论你想做什么,你的函数本身不会返回任何东西。只需添加返回:

        function z(x) {
          display.log(x, y)
          while (x > 0) {
            if (x > 0) {
              break;
            } else {
              x = x - y;
              return z(x);
            }
            return x;
          }
          return x /// this is what was added
        }
        

        【讨论】:

          【解决方案6】:

          这是因为当 x > 0 时点击 break

           if (x > 0) {
            break; 
          

          【讨论】:

            猜你喜欢
            • 2018-01-08
            • 2023-04-08
            • 2021-09-06
            • 2015-01-01
            • 2021-04-06
            • 1970-01-01
            • 1970-01-01
            • 2021-11-12
            • 1970-01-01
            相关资源
            最近更新 更多