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时弹出?

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
要理解每次递归调用函数时都是创建新的堆栈,执行
add(0)会递归调用add四次,而你只在最里面那一层return,其余的都没有return因此返回undefined。查看函数调用时的堆栈帮助理解
只要再加个
return就行了我在慕课网已经回答了你的问题,你先看看能理解不能。不理解可以继续追问。回头我会把慕课网上的内容拷贝过来
简单解:递归几层,那出来也得几层,不然调用堆栈就无法配对了。
那为何是
undefined呢?因为else体里面没有return,所以不管多少层递归,永远都是undefined。然。
其结果会是什么呢?留给题主吧!