投稿
投稿
投稿
反馈
评论 返回
顶部

内容字号: 默认 大号超大号

段落设置: 段首缩进取消段首缩进

字体设置:切换到宋体切换到微软雅黑

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

发布:2019-09-25 12:55 浏览: 评论(
先看下面的代码:

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

前端新手交流群
欢迎加入web前端新手交流qq群:734802480
分享给小伙伴们:

更多文章

相关文章

评论

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。


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