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的值。

最新文章

  1. HDOJ 4652 Dice
  2. 【译】使用newInstance()来实例化fragment
  3. 点击div折叠
  4. Java开发中经典的小实例-(随机产生验证码)
  5. jquery remove/add css
  6. FreeMarker中文API手冊(完整)
  7. Swift中的注释以及表达式
  8. 图解SVD分解
  9. java DI 框架spring(web)、Guice(web)、Dagger&Dagger2(android)
  10. eclipse Dynamic web project 工程目录
  11. LOGISTIC回归分析
  12. (NO.00001)iOS游戏SpeedBoy Lite成形记(八)
  13. Elasticsearch.net项目实战
  14. Atom选中多行操作
  15. C++学习(三十五)(C语言部分)之 单链表
  16. 利用js键盘事件制作会移动效果
  17. 《算法》第六章部分程序 part 3
  18. 字典的增删改查 daty 5
  19. Python给我的小伙伴来个微信机器人
  20. Perl socket编程

热门文章

  1. pytorch 配置详细过程
  2. 创建型模式 - 简单工厂模式StaticFactoryMethod
  3. 了解 Transformers 是如何“思考”的
  4. undefined会变为null吗?
  5. Zookeeper+SpringCloud微服务(入门二)
  6. Java期末测试
  7. 学习Java Day17
  8. 疑问:如何替代dtb文件
  9. C语言学习--结构体指针
  10. C语言学习--指针大小端