有关递归函数的返回值问题 function invoke(){ var v = dataRecursion(ary,cons) ; alert(v); //结果居然为undefined } 你给invoke里用的函数传参了吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 function invoke(){ var v = dataRecursion(ary,cons) ; alert(v); //结果居然为undefined } invoke里,ary,cons根本就没有定义也没有值 传了。现在假定参数和逻辑都是正确的,正如我描述的,alert(ary[a])时是正确的,但返回给v后确是undefined 哦?代码基本上就是这样了。无非是再定义两个参数。我说过了,在递归函数中alert时是正确的,但返回给v后,alert(v)时却是undefined.我把dataRecursion (ary[a],cons);改成了return dataRecursion (ary[a],cons);还是一样的。。 很奇怪。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT=""> <META NAME="Keywords" CONTENT=""> <META NAME="Description" CONTENT=""> </HEAD><script>function invoke(ary,cons){ var v = dataRecursion(ary,cons) ; alert(v); //结果居然为undefined } function dataRecursion (ary,cons) { for (var a in ary) { if(ary[a] instanceof Array) { dataRecursion (ary[a],cons); //在此递归调用 } else if (a == cons){ alert(ary[a]); //是有值的 return ary[a] ; //返回它 } } } var aa= new Array(5);for (i=0;i<8 ;i++ ){ aa[i]=100+i} invoke(aa,4);</script> <BODY> </BODY></HTML>你自己试一下. 不用试也看得出来,你这段代码是没有递归调用的,直接从else if语句块返回了 请分析或解释下当一个函数被递归调用后,再返回的时候,为什么返回的值是一个undefined? 请关心下递归函数,也请解释下递归函数中如何正确的返回值,特别是循环语句中递归调用时。不要总在看代码片段,说没有定义参数之类,我已经说过,假定参数都是正确的,并且函数也递归调用了,alert时值也是正确的,但返回后接收到的确实undefined,为什么? 请各位考虑清楚后再回复!谢谢。如能得到正确合理的解释和解决办法,本人承诺加分!! 你递归的时候没有返回值,function dataRecursion (ary,cons) { for (var a in ary) { if(ary[a] instanceof Array) { return dataRecursion (ary[a],cons); //在此递归调用 } else if (a == cons){ alert(ary[a]); //是有值的 return ary[a] ; //返回它 } } } 因为你没有返回递归的值,如果没有递归,能返回值,当执行到递归语句,这个函数就没有return语句了当然是undefined如果是在C#中,编译时就会报错了:不是每个路径都有返回值! 楼上可能说得不是很清楚,我今天也碰上这样的问题了,解决的办法是在调用自己里写上一个return 语句。如果你不写上return 语句的话,返回的结果当然是不可预知的,因为,你在每次调用自己里,执行的结果都会被忽略掉(没写return的话)。不知,大家听没白了没。 fusioncharts free挡住extJS的日期控件datefield 类似csdn 配置我感兴趣的社区 一个菜鸟问题(关于拖动DIV)~~~~~还请帮帮忙 请问怎么判断用户名密码登录错误?谢谢! 求一段用正则表达式验证时间输入的js,谢谢啦! 有请梅花雪~ 求一正则javasript转化为vbsript 问一个HTC的问题 +++++++++ 一个超简单的JAVAScript问题 +++++++++ 求一段javascript代码 JS高手--赠100分--有关选项卡的页面传值 正则表达式去HTML标签问题-被大于号绊住了
var v = dataRecursion(ary,cons) ;
alert(v); //结果居然为undefined
} invoke里,ary,cons根本就没有定义也没有值
我说过了,在递归函数中alert时是正确的,但返回给v后,alert(v)时却是undefined.
我把dataRecursion (ary[a],cons);改成了
return dataRecursion (ary[a],cons);还是一样的。。
很奇怪。
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<script>
function invoke(ary,cons){
var v = dataRecursion(ary,cons) ;
alert(v); //结果居然为undefined
} function dataRecursion (ary,cons) {
for (var a in ary) {
if(ary[a] instanceof Array) {
dataRecursion (ary[a],cons); //在此递归调用
} else if (a == cons){
alert(ary[a]); //是有值的
return ary[a] ; //返回它
}
} }
var aa= new Array(5);
for (i=0;i<8 ;i++ )
{
aa[i]=100+i
} invoke(aa,4);</script>
<BODY>
</BODY>
</HTML>你自己试一下.
请分析或解释下当一个函数被递归调用后,再返回的时候,为什么返回的值是一个undefined?
不要总在看代码片段,说没有定义参数之类,我已经说过,假定参数都是正确的,并且函数也递归调用了,alert时值也是正确的,但返回后接收到的确实undefined,为什么?
请各位考虑清楚后再回复!谢谢。如能得到正确合理的解释和解决办法,本人承诺加分!!
function dataRecursion (ary,cons) {
for (var a in ary) {
if(ary[a] instanceof Array) {
return dataRecursion (ary[a],cons); //在此递归调用
} else if (a == cons){
alert(ary[a]); //是有值的
return ary[a] ; //返回它
}
} }
当然是undefined如果是在C#中,编译时就会报错了:不是每个路径都有返回值!