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

:暂无数据 2026-10-04 16:00:03 :0

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

大家好,今天小编来为大家解答以下的问题,关于js递归函数的执行过程,javascript递归函数 求js高手解答,要实现一个根据路径获取json对象值的函数,有很多不明白的地方这个很多人还不知道,现在让我们一起来看看吧!

本文目录

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地址栏中输入这个就知道为什么是那个结果了,因为答案就是这样.你不就是要求阶乘吗

OK,关于js递归函数的执行过程和javascript递归函数 求js高手解答,要实现一个根据路径获取json对象值的函数,有很多不明白的地方的内容到此结束了,希望对大家有所帮助。

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

本文编辑:admin

本文相关文章:


jsp和javascript的区别(javascript 和jsp的区别)

jsp和javascript的区别(javascript 和jsp的区别)

各位老铁们好,相信很多人对jsp和javascript的区别都不是特别的了解,因此呢,今天就来为大家分享下关于jsp和javascript的区别以及javascript 和jsp的区别的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一

2026年9月3日 20:20

javascript生成随机数(如何使用javascript生成6位随机数)

javascript生成随机数(如何使用javascript生成6位随机数)

其实javascript生成随机数的问题并不复杂,但是又很多的朋友都不太了解如何使用javascript生成6位随机数,因此呢,今天小编就来为大家分享javascript生成随机数的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的

2026年9月2日 02:30

component翻译(material description和component有区别吗)

component翻译(material description和component有区别吗)

其实component翻译的问题并不复杂,但是又很多的朋友都不太了解material description和component有区别吗,因此呢,今天小编就来为大家分享component翻译的一些知识,希望可以帮助到大家,下面我们一起来看看

2026年8月22日 19:40

javascript教程 阮一峰(javascript 有几种数据类型)

javascript教程 阮一峰(javascript 有几种数据类型)

大家好,如果您还对javascript教程 阮一峰不太了解,没有关系,今天就由本站为大家分享javascript教程 阮一峰的知识,包括javascript 有几种数据类型的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年6月11日 16:00

更多文章:


协方差计算公式(协方差的计算公式)

协方差计算公式(协方差的计算公式)

这篇文章给大家聊聊关于协方差计算公式,以及协方差的计算公式对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月11日 08:10

易语言网页api接口怎么调用(易语言,怎么读取网页json的api)

易语言网页api接口怎么调用(易语言,怎么读取网页json的api)

本篇文章给大家谈谈易语言网页api接口怎么调用,以及易语言,怎么读取网页json的api对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月11日 08:00

majority of(the majority of 和 a majority of的区别以及用法例句)

majority of(the majority of 和 a majority of的区别以及用法例句)

这篇文章给大家聊聊关于majority of,以及the majority of 和 a majority of的区别以及用法例句对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月11日 07:40

汉字机内码查询表(1个汉字的机内码是几位谢谢)

汉字机内码查询表(1个汉字的机内码是几位谢谢)

大家好,关于汉字机内码查询表很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于1个汉字的机内码是几位谢谢的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年10月11日 07:20

promote翻译(英语翻译倡导怎么说)

promote翻译(英语翻译倡导怎么说)

其实promote翻译的问题并不复杂,但是又很多的朋友都不太了解英语翻译倡导怎么说,因此呢,今天小编就来为大家分享promote翻译的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 06:30

用手机如何导航?开车用手机导航哪个软件最好

用手机如何导航?开车用手机导航哪个软件最好

今天给各位分享用手机如何导航的知识,其中也会对用手机如何导航进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月11日 06:20

多线程技术有什么用(多线程有什么作用)

多线程技术有什么用(多线程有什么作用)

其实多线程技术有什么用的问题并不复杂,但是又很多的朋友都不太了解多线程有什么作用,因此呢,今天小编就来为大家分享多线程技术有什么用的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 05:40

another time(another time和other time的区别)

another time(another time和other time的区别)

大家好,another time相信很多的网友都不是很明白,包括another time和other time的区别也是一样,不过没有关系,接下来就来为大家分享关于another time和another time和other time的区

2026年10月11日 05:00

java开发工具包jdk(JDK是什么意思)

java开发工具包jdk(JDK是什么意思)

其实java开发工具包jdk的问题并不复杂,但是又很多的朋友都不太了解JDK是什么意思,因此呢,今天小编就来为大家分享java开发工具包jdk的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 04:50

mysql 命令(MySQL的基本命令)

mysql 命令(MySQL的基本命令)

大家好,如果您还对mysql 命令不太了解,没有关系,今天就由本站为大家分享mysql 命令的知识,包括MySQL的基本命令的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月11日 03:00

最近更新

majority of(the majority of 和 a majority of的区别以及用法例句)
2026-10-11 07:40:02 浏览:0
热门文章

标签列表