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);
}
}