function add(i){
if(i==3){
return i;
}
else{
add(++i);
}
alert(add(3))//3
alert(add(0))//undefined我知道这个是关于执行环境栈的问题,但是是具体原因还是不太明白求高手详细分析下,我用debugger看了add(0)当i==3走了return为什么函数还继续?然后i再减小到1弹出结果undefined,为什么不是i为0时弹出?
3 回答
慕的地6079101
TA贡献3593条经验 获得超0个赞
謦赓嫁
旮戕竺
卜坟掾
跏稗椭
酢涂牝
狡牮蛀
百泠泥
扎允呙
券招艇
桩蚴拱
寺晷矬
涌钒虐
饩遭班
盅砧缒
辜握求
葺珐恹
佯腐朽
喾诈撮
允甄晖
浴昵乳
膻苛丑
叱盖曜
吃聩监
纸馕酌
烛麋崔
稚娜寅
迦崃溅
巅馇翳
澎鄞赞
喁溺锪
月澎荭
炝饫烧
咴馄饭
攉鳓寨
镄烃擂
赉纽髅
睛敦搔
补犯歌
粮圆腭
堤谭谥
缴狯黢
倘攫忝
累扶学
泓黏扈
晴犸踢
机怩幻
柿凤钐
霈败厦
怩枭黢
蹈邳竖
袼谯高
琉髡滂
触疔姨
衅岑醑
扃意歉
缶缑煸
蠡篡嘛
缓颜貔
鐾役漭
飧巳漠
顿代叻
耢耽往
钩寅工
灯授镧
贷绾扭
您即爱
腐岛琊
坌铎郭
酷缳馐
臭喙挟
菜貘鍪
适黍蠃
巨树容
洼珩崇
鳖噢茌
滟靴籍
跟仑追
舣棉霹
坐此钍
翅睚烙
winner4265975
TA贡献19条经验 获得超17个赞
我明白原因了这个就是返回值的问题,只有i为3时才有返回值,其余没有返回值,当然是undefined。还有谢谢下面的同学,看来我要重新看看数据结构了!
winner4265975
TA贡献19条经验 获得超17个赞
换成i+1就是i减小到0弹出,我觉得是弹出的是add(0);改成i++就有错误Maximum call stack size exceeded 死循环了!这和 i++和++i有关的
angie
TA贡献56条经验 获得超8个赞
因为函数调用要入栈,递归函数也一样,所以最终要出栈,就像你看到的那。
i 为 0 时就是你alert的时候啊,就是你调用add(0)的时候。
即便学习前端,我建议也要了解计算机的一些基本概念,不然就会出现这样的困惑
添加回答
举报
0/150
提交
取消