js如何利用闭包的记忆功能加快代码运行速度?

时间: 作者:admin 浏览:
先看下面的代码:

var factorinal=(n)=>{
    if(n===0){
        return 1;
    }
    return n*factorinal(n-1);
}

这个函数代码看起来没什么问题啊?但是你会发现,这个方法是不是重复的在调用自己?于是每次执行到return后面的语句时,就会再次调用自己,但这种调用是直接从设备的内存里再次读取的,因为系统的垃圾回收机制,所以每执行一次就要重新调用一次,然后来看看优化后的代码:
 

var factorinalFast={
    arg:function(n){
	if(n===0){
	    return 1;
	}
	return n*factorinalFast.arg(n-1);
    }
}

这个方法乍一看,也没什么特别的啊,可是我们来运行一下,看看执行的时间相差多少:
 

console.time();
console.log(factorinal(10));
console.timeEnd();


console.time();
console.log(factorinalFast.arg(10));
console.timeEnd();


运行时间竟然相差2倍,这里还只是n=10;数字更大效果更明显。

其实第二个方法就是利用了闭包的记忆功能:

factorinal方法每次调用完都会被系统垃圾回收,而后要用还得从内存里重新调用,这过程就耗费了更多的时间;

factorinalFast.arg()就不同了,因为闭包的原因,factorinalFast里面的arg方法是不会被系统垃圾回收的,相当于临时记忆,再次使用时不需要从内存重新调用,因为它并没有被回收,所以可以直接运行,因此减少了调用的次数(这里不要以为是:减少了代码执行的次数。在以上两个方法的内部统计执行次数,你会发现次数是一样的,所以要从内存的角度去理解闭包

微信公众号
微信公众号:
  • 前端全栈之路(微信群)
前端QQ交流群
前端QQ交流群:
  • 794324979
  • 734802480(已满)

更多文章

栏目文章


Copyright © 2014-2023 seozhijia.net 版权所有-粤ICP备13087626号-4