js-惰性函数
2024-10-21 15:59:08
1. 需求:我们现在需要写一个 foo 函数,这个函数返回首次调用时的 Date 对象,注意是首次。
使用场景:当我们每次都需要进行条件判断,其实只需要判断一次,接下来的使用方式都不会发生改变的时候,想想是否可以考虑使用惰性函数。
惰性函数:顾名思义,有点懒惰,懒到事件只处理一次,当然不是值整个函数只处理一次。而是里面的某一行或者多行只执行一次。正常情况下,一个函数内部,所有的该执行的东西,无论是定义变量,还是新建对象,亦或者做判断,还是运算,定义定时器等等,都是依照顺序来执行,无论这个函数执行调用多少次,都依旧是如此;
简单理解下,惰性函数的本质就是函数重写,所谓惰性载入,指函数执行的分支只会发生一次。
为了不影响全局变量,我们用闭包简单来做:
function foo() {
if (foo.t) return foo.t;
foo.t = new Date();
return foo.t;
}
但是每次执行都需要进行一次判断,为了解决每次都需要判断的情况,使用惰性函数,
var foo = function() {
var t = new Date();
foo = function() {
return t;
}
console.log(foo, 'foo');
console.log(foo(), 'foo()');
return foo()
}
console.log(foo());
setTimeout( () => {
console.log(foo());
}, 3000)
最后发现两次打印一摸一样,因为第一次执行立即执行函数的时候,没有跳过var t = new Date();这一步,并且把一个新的函数返回给了foo,第二次执行的时候,foo函数只会执行:立即执行函数中的那个新的函数,也就跳过了var t = new Date();直接使用第一次调用的t的值。
最新文章
- HDOJ 4652 Dice
- 【译】使用newInstance()来实例化fragment
- 点击div折叠
- Java开发中经典的小实例-(随机产生验证码)
- jquery remove/add css
- FreeMarker中文API手冊(完整)
- Swift中的注释以及表达式
- 图解SVD分解
- java DI 框架spring(web)、Guice(web)、Dagger&;Dagger2(android)
- eclipse Dynamic web project 工程目录
- LOGISTIC回归分析
- (NO.00001)iOS游戏SpeedBoy Lite成形记(八)
- Elasticsearch.net项目实战
- Atom选中多行操作
- C++学习(三十五)(C语言部分)之 单链表
- 利用js键盘事件制作会移动效果
- 《算法》第六章部分程序 part 3
- 字典的增删改查 daty 5
- Python给我的小伙伴来个微信机器人
- Perl socket编程