web中如何优化尾调用


这篇文章主要为大家展示了“web中如何优化尾调用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web中如何优化尾调用”这篇文章吧。
从字面理解,自然而言就是在函数的尾部返回一个函数的调用,通常来说,指的是函数执行的最后一步。举个例子为什么f1函数不是呢,我们看这个函数的等价形式似乎写到这里,根据尾调用定义,我们就明白了,只有f2函数是在尾部调用。说到这里,为什么要说尾调用呢?我们事先想一想传统的递归,典型的就是首先执行递归调用,然后根据这个递归的返回值并结算结果,那么传统的递归缺点有哪些呢效率低,占内存。如果递归链过长,可能会stack overflow那么我们是不是可以做优化呢,这就可以涉及上面提到的尾调用,它的原理是啥呢按照阮一峰老师在es6的函数扩展中的解释就是:函数调用会在内存形成一个“调用记录”,又称“调用帧”(call frame),保存调用位置和内部变量等信息。如果在函数A的内部调用函数B,那么在A的调用帧上方,还会形成一个B的调用帧。等到B运行结束,将结果返回到AB的调用帧才会消失。如果函数B内部还调用函数C,那就还有一个C的调用帧,以此类推。所有的调用帧,就形成一个“调用栈”(call stack)。这里的“调用帧”和“调用栈”,说的应该就是“执行环境”和“调用栈”。因为尾调用时函数的最后一部操作,所以不再需要保留外层的调用帧,而是直接取代外层的调用帧,所以可以起到一个优化的作用。从上述的描述中,我们视乎可以理解成它的原理类似于当编译器检测到一个函数调用是免费云主机域名尾递归时,它会覆盖当前的活动记录而不是在函数栈中创建一个新的调用记录。这样子,我们也可以理解成,不同的语言编译器或者是解释器做了尾递归优化,才让它不会爆栈。既然是这样子的话,尾递归的优化,取决于浏览器,那具体有哪些主流浏览器支持呢safari 和火狐,有兴趣的可以去了解一下,可以写个斐波那契数列数列验证一下。既然我们知道了,很多浏览器对于尾递归的优化支持的浏览器并不多,那你会好奇,当我们使用尾递归进行优化的时候,依然出现栈溢出的错误,那么我们如何解决呢?我在网上看到一个不错的方案,采用的是蹦床函数那么如何使用呢我们拿最常见的斐波那契数列来说吧根据上面的式子,我们可以将其写成迭代形式,用一个变量去缓存它的值以上是“web中如何优化尾调用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注百云主机行业资讯频道!

相关推荐: HTML文档实例分析

今天小编给大家分享一下HTML文档实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。这是第一个段落。以上实例包含了三个 HTML 元素。HT…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 09/12 10:23
下一篇 09/12 10:23

相关推荐