js递归函数的执行过程(javascript递归函数 求js高手解答,要实现一个根据路径获取json对象值的函数,有很多不明白的地方)

本文目录
- javascript递归函数 求js高手解答,要实现一个根据路径获取json对象值的函数,有很多不明白的地方
- javascript 递归函数
- 什么是javascript函数的递归调用
- javascript 递归函数 运算原理
- 请写出下面这个函数的递归过程(javascript),并讲解一下注释部份
javascript递归函数 求js高手解答,要实现一个根据路径获取json对象值的函数,有很多不明白的地方
递归经常碰到的问题了。
出问题的地方是 Run(temp,path);
既然是递归的调用 而且这个函数本身 有 return 值 那么 你应该在
调用 Run(temp,path);的时候 接收他的返回值
应该写成 value = Run(temp,path);
1. 现在你可以设成 局部变量 var value 了。
之所以出现undefined就是因为
return value 这行代码 就执行了 1次 也就是 第一个执行 var test=Run(myjson,mypath);的时候
这个时候 value 变量还没有定义出来, value是在 最后一次执行 Run(temp,path);的时候才定义的,而需要把这个 返回出来 并接收 才有效。
2. json=json[path],
这个地方 不会报错 你是写错了代码
你如果 把这个地方 写成 json=json[path],
那么下面 Run(temp,path); 是不是也应该写成 Run(json,path);呢?
这样就不会报错。
3. 在javascript里 数组和 对象 都是属于 引用类型的, 这是为了 节省内存空间。
其实道理简单, var a = {b:1} 这个时候 a变量里面 存储的是 保存这个 对象的内存地址,
打个比方 这个对象是一个宝箱 他是隐藏在内存的, a变量里面是打开这个宝箱的钥匙和地图
那么 b=a的时候 只是 复制了 钥匙和地图, 宝箱还是一个, 所以这个时候 a 和b 是指同一个对象的。
最后代码 修改后是这样
function Run(json,path){
if(path.length《=1){
var value=json[path]; // 如果这里换成var value=json[path]结果是undefined
} else {
var temp;
json=json[path]; //这里为什么不能用 json=json[path]
path.splice(0,1);
value = Run(json,path);
//arguments.callee(temp,path);
}
return value;
}
var myjson={a:1,b:{c:{e:3},d:4}};
var mypath=[’b’,’c’,’e’];
var test=Run(myjson,mypath);
alert(test);
javascript 递归函数
其实难点就在于对递归函数的理解。所谓递归函数,就是函数在执行时调用自己。程序在调用一个函数时,首先执行这个函数的程序,执行完毕后返回到原调用前的上一级程序继续运行这一级程序。调用递归函数也是如此,在执行完递归函数,得到3之后,它要退出递归函数回到调用它的原来的主程序继续去执行原来的主程序。由于调用递归函数时程序是逐级进行的,所以返回时也是逆向逐级执行程序并返回的,即在得到3后,返回上一级执行这一级的程序就得到4(即再次执行document.writeln(num1)),再返回上一级执行这一级的程序得到5(即再次执行document.writeln(num1))。
什么是javascript函数的递归调用
递归调用又称回调函数,即在一个函数内部调用本函数,如
rend()
{
do(rend);
}
//do 为随便起的函数名,当然要先定义该函数,这里我写的样例函数是无穷调用,除非在另一个函数中终止,也可在后面写return中断该函数
javascript 递归函数 运算原理
当method这个方法传进参数3的时候,这样num等于3,不满足num 《1这个条件。于是他会跑到return num * method(num-1) 这里,相当于 3 * method(3-1)。在这里。method(3-1)再次运行。此时,num参数值为2了,还是不满足num 《1 这个条件 ,于是又跳到else那个语句、于是加上前面的就有 3* 2 * methode(2-1);此时num等于1了,return 1;也就是说返回了1.此时第一次的那个语句就是 return 3 * 2 * 1。也就是等于6。如果你传入是的5那就是 5* 4* 3 *2 *1 == 120;
请写出下面这个函数的递归过程(javascript),并讲解一下注释部份
1,递归,function f(num){
if(num《=1){
return 1;
}
else{
return f(num-1)*num; //这里是注释部份!!
}
*num里的num还属于function f(num)这个函数,所以return f(num-1)*num这里面的2个num的值都是上一次的num的值,第一次就是return f(9)*10,第二次就是f(8)*9,一直到f(1)*2,然后之后就停止了.
2,javascript:alert(10*9*8*7*6*5*4*3*2),楼主在IE地址栏中输入这个就知道为什么是那个结果了,因为答案就是这样.你不就是要求阶乘吗

本文相关文章:
jsp和javascript的区别(javascript 和jsp的区别)
2026年9月3日 20:20
javascript生成随机数(如何使用javascript生成6位随机数)
2026年9月2日 02:30
component翻译(material description和component有区别吗)
2026年8月22日 19:40
javascript教程 阮一峰(javascript 有几种数据类型)
2026年6月11日 16:00
更多文章:
易语言网页api接口怎么调用(易语言,怎么读取网页json的api)
2026年10月11日 08:00
majority of(the majority of 和 a majority of的区别以及用法例句)
2026年10月11日 07:40
another time(another time和other time的区别)
2026年10月11日 05:00





