首页 > W3C Lab > JavaScript > Tail Call Opimization——YDKJS
2015
09-22

Tail Call Opimization——YDKJS

据说ES6有一个尾部调用优化,如果JS引擎支持TCO那么,当定义一个函数时,如果return后面直接跟一个函数调用,那么这个函数将不会新建一个调用栈,而是重用已有的栈,达到节约内存的目的,这个TCO的最好用例就是递归

例如下面两种递归的写法

其中第一个函数fac1里面,return后面没有直接跟函数,而是用n*fac1(n-1),这样是不会触发TCO的,因为调用了fac1计算了结果之后还要乘n,所以递归函数一定要改写成return后面直接跟函数调用的形式,如fac2所示,可是我在chrome里面测试了一下,貌似也看不出来有什么区别,用断点调试,还是一样有调用栈- -,所以然并卵?可能现在chrome并不支持TCO或者是我还不会进行性能分析?因为算阶乘出来的数很容易就变成infinity了…以后慢慢学

最后编辑:
作者:scplay
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。