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

js-惰性函数的更多相关文章

  1. js惰性函数

    假设我们需要写一个函数,返回首次调用该方法的时间,注意是首次. 1.普通函数,首先定义一个全局变量 t var t; function(){ if(t) return t; t = new Date( ...

  2. 惰性函数——JS高级

    我们先来看一下js的异步提交. XHR我们在原生的时候常常用到,因为常用到,我们更多把封装到了工具库中 先看下他最常用的实现 // 旧方法 function createXHR() { var xhr ...

  3. JavaScript惰性函数定义

    函数是js世界的一等公民,js的动态性.易变性在函数的应用上,体现的淋漓尽致.做为参数,做为返回值等,正是函数这些特性,使得js开发变的有趣. 下面就阐述一下,js一个有趣的应用--惰性函数定义(La ...

  4. JS回调函数全解析教程

    转自:http://blog.csdn.net/lulei9876/article/details/8494337 自学jQuery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速g ...

  5. 学习js回调函数

    <!DOCTYPE HTML> <html> <head> <meta charset="GBK" /> <title> ...

  6. 如何理解JS回调函数

    1.回调函数英文解释: A callback is a function that is passed as an argument to another function and is execut ...

  7. Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针

    Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针   1.1. java方法引用(Method References) 与c#委托与脚本语言js ...

  8. 【转】关于URL编码/javascript/js url 编码/url的三个js编码函数

    来源:http://www.cnblogs.com/huzi007/p/4174519.html 关于URL编码/javascript/js url 编码/url的三个js编码函数escape(),e ...

  9. js引出函数概念的案例

    js引出函数概念的案例   1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8&q ...

  10. prototype.js $F()函数介绍

    $F()是一个能够简化编码量的函数, 对于字段输入控件有效,包括input.textarea.select等,该函数的输入参数为这些输入控件元素对象的id或元素对象本身,函数负责返回 这些输入控件元素 ...

随机推荐

  1. 动力节点——day07

    什么是异常? 异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序 Java中异常的存在形式? 异常在java中以类的形式存在,每一个异常类都可以创建异常对象 异常的继承结构图 编译 ...

  2. Unity - 创建C#脚本默认编码格式为UTF8

    嗨咯大家好,哈哈哈哈哈哈哈哈哈哈,今儿小黑加班,目的只有一个,解决Unity创建的脚本通过VS打开后编码格式不正确,导致从Unity的Inspector面板与Mac上边的VS看到的中文为乱码,很气,找 ...

  3. MySQL数据库技术实战

    MySQL数据库技术实战   一,安装mysql 很早之前就知道mysql提供了一套数据库样本(github地址),用于测试你的应用程序和数据库服务器. 今天分享下使用过程并将他发布到了码云,以便于同 ...

  4. LeetCode_804. 唯一摩尔斯密码词

    题目 难度:简单 原文:https://leetcode-cn.com/problems/unique-morse-code-words/ 题目 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一 ...

  5. vs2019编写代码时的光标变成了黑块,选中字时替换掉了黑块选中的字的解决方法

    这是由于不小心按到了Insert键 解决方法:再按一下Insert就好了. 因为插入键(insert)是一个状态表示键 当你按倒它时,它会进入一个覆盖模式,在光标位置新输入字会替代原来的字:另一种为插 ...

  6. Netty进阶

    1.Netty问题 TCP协议都存在着黏包和半包问题,但是UDP没有 1.粘包现象 发送方分10次发送,接收方一次接受了10次发送的消息 2.半包现象 调整服务器的接受缓冲区大小(调小) 半包会导致服 ...

  7. uboot启动过程 2

    512M内存, 地址范围 [0x80000000, 0xA0000000)  UBOOT原先位置 0x87800000, 移动后的位置0x9FF47000,   也就是最后 700多k,  前面的位置 ...

  8. Ansible 快速入门到放弃

    Ansible 快速入门到放弃 最是人间留不住,朱颜辞镜花辞树. 1-Ansible 简介 Ansible是一个配置管理和配置工具,它使用SSH 连接到服务器并运行配置好的任务,服务器上只需要开启ss ...

  9. 【KAWAKO】模型的压缩、扩张,计算模型的各种成本

    目录 模型压缩 量化 稀疏化训练 剪枝 知识蒸馏 自蒸馏 集成 使用精细化模型结构 模型扩张 深度 宽度 输入图像的分辨率 深度.宽度.分辨率联合扩张 使用精细化模型结构 计算模型的各种成本 参数量 ...

  10. ABAP 辨析CO|CN|CA|NA|CS|NS|CP|NP

    1.文档说明 本篇文档将通过举例,解析字符的比较运算符之间的用法和区别,涉及到的操作符:CO|CN|CA|NA|CS|NS|CP|NP 2.用法和区别 用法总览 以下举例,几乎都使用一个字符变量和一个 ...