Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么代码的结果是未定义的?_Javascript - Fatal编程技术网

Javascript 为什么代码的结果是未定义的?

Javascript 为什么代码的结果是未定义的?,javascript,Javascript,它警告“未定义”。 但如果我这样写的话: function fun(x){ x++; if(x==2){ fun(x); }else { return x; } } alert(fun(1)); 它将向3号警报 为什么在第一种情况下它会发出警报“未定义”而不是3?对此感到困惑…将其更改为: function fun(x){ x++; if(x==2){ fun(x); }else { alert(x); }

它警告“未定义”。 但如果我这样写的话:

function fun(x){
   x++;
   if(x==2){
      fun(x);
   }else {
      return x;
   }
 }
alert(fun(1));
它将向3号警报

为什么在第一种情况下它会发出警报“未定义”而不是3?对此感到困惑…

将其更改为:

function fun(x){
  x++;
  if(x==2){
     fun(x);
  }else {
    alert(x);
  }

}
fun(1);

否则,当if语句中的
x==2

时,您不会从函数返回任何值,如果
x==2
则缺少返回语句

这使得
有趣
返回未定义

将其修改为此应该可以实现以下目的:

function fun(x){
   x++;
   if(x==2){
      return fun(x);
   } else {
      return x;
   }
}
alert(fun(1)); //3

如果您转到Chrome的控制台并逐个运行这两个代码,您会发现在这两种情况下都返回“undefined”。唯一的区别是,在一种情况下,您是在警告函数,而在另一种情况下,您是在警告实际值

在第一种情况下,显示undefined,因为警报将显示函数返回的最终值。在这种情况下,您不会从函数返回任何内容,因为返回仅在else部分。因此,返回一个未定义的


在第二种情况下,同样的事情也在发生。这是因为您在else部分有警报,最终值将显示在警报中。

如果您尝试在google chrome开发者控制台中执行以下操作-

第一次粘贴-

function fun(x){
   x++;
   if(x==2){
      return fun(x);
   }else {
      return x;
   }
 }
alert(fun(1));
按enter键将声明函数。然后叫fun(1)。你仍然会被取消查找。这是因为它是递归调用,并且在调用堆栈中维护执行序列。从递归函数调用值获取return,但由于递归调用函数时没有使用return关键字,因此它给出了unfind值

我认为callstack在这里起了作用,因为没有返回关键字,导致了未定义的值

如果我在某个地方错了,请分享你的观点

你需要
返回fun(x)。问题是“为什么”,而不是“如何修复此问题”。解释一下会有帮助的。
function fun(x){
  x++;
  if(x==2){
     fun(x);
  }else {
    alert(x);
  }
}