首页 > 其他分享 >js-惰性函数

js-惰性函数

时间:2023-02-27 00:11:09浏览次数:39  
标签:foo console 函数 js 惰性 Date 执行

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

 

标签:foo,console,函数,js,惰性,Date,执行
From: https://www.cnblogs.com/tdcqcrtd/p/17158290.html

相关文章

  • Python 常用内置函数 肆
    max返回可迭代对象中的最大值语法参数defmax(*args,key=None):#knownspecialcaseofmax"""max(iterable,*[,default=obj,key=func])->value......
  • springboot默认的json配置
    springboot默认的json配置1.@JsonIgnore返回前端时对应字段不进行序列化返回publicclassUser{@JsonIgnoreprivateStringname;}2.@JsonFormat日期格......
  • JSON注入
    JSON注入原理:JSON注入是指应用程序所解析的JSON数据来源于不可信赖的数据源,程序没有对这些不可信赖的数据进行验证、过滤,如果应用程序使用未经验证的输入构造JSON,则可以......
  • python绘图函数
    1.plot绘制线型图importmatplotlib.pyplotaspltimportnumpyasnpimportpandasaspdplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicod......
  • MySQL学习笔记-函数
    MySQL-常用函数select{函数}({参数});select是查询用的,用来展示函数返回值。一.字符串函数常用的字符串函数:1.concat拼接selectconcat('Hello','World');......
  • ES6-ES11 函数参数的默认值设置
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>函数参......
  • JavaScript 构造函数
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* *创建一个构造函数,专门用来创建Person对......
  • JavaScript 立即执行函数
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> //函数对象() /* *立即执行函数 ......
  • 29.分析函数
    1.求和scott@ORCLPDB012023-02-2620:44:09>selectename,sal,(selectsum(sal)fromemp)tsalfromemp;ENAME SAL TSAL------------------------------......
  • 27.报表高级分组函数
    --group函数复习hr@ORCLPDB012023-02-2619:55:19>selectavg(salary),stddev(salary),count(commission_pct),max(hire_date)2fromemployees3wherejob_id......