秒懂高阶编程之惰性函数

简介: 秒懂高阶编程之惰性函数

前言

高阶编程听起来很高大上,但只要你弄懂了,一切就豁然开朗。
我将会用接下来的几篇文章讲一下高阶编程的一些技巧。
今天要讲解的是高阶编程技巧的惰性函数,又称(惰性载入函数)。

首先什么是惰性(载入)函数?

惰性载入表示函数执行的分支只会在函数第一次调用的时候执行,在第一次调用过程中,该函数会被覆盖为另一个按照合适方式执行的函数,这样任何对原函数的调用就不用再经过执行的分支了。

如果上面简述的定义让你难理解的话,我们看一个例子来理解一下。开发中我们总是会手写一个函数用于判断当前环境是哪种环境然后再执行相应环境下应该执行的代码(逻辑)。

下面是一个区分浏览器的兼容性来注册事件的一个函数,由于各浏览之间的差异,不得不用方法检测当前环境的能力,用以实现每种注册事件的方式。

function addEvent(type, element, fun) {
      if (element.addEventListener) {
        element.addEventListener(type, fun, false);
      }
      else if (element.attachEvent) {
        element.attachEvent('on' + type, fun);
      }
      else {
        element['on' + type] = fun;
      }
    }

从整体上看,上面的方法已经实现了区分了每种环境,但是实际上在同一环境中,分支其实走一次,做一回判断就可以了,不需要每次都要做一回判断。这样就引入了我们的惰性载入函数。惰性载入表示函数执行的分支仅会发生一次。实现惰性载入的方式有两种。第一种是在函数被调用的时候再处理函数。在第一次调用的过程中,该函数会被赋给为另一个按照合适方式执行的函数。这样任何对原函数的调用都不用在经过执行的分支了。方式一实现

function addEvent(type, element, fun) {
      if (element.addEventListener) {
        addEvent = function (type, element, fun) {
          element.addEventListener(type, fun, false);
        }
      }
      else if (element.attachEvent) {
        addEvent = function (type, element, fun) {
          element.attachEvent('on' + type, fun);
        }
      }
      else {
        addEvent = function (type, element, fun) {
          element['on' + type] = fun;
        }
      }
      addEvent(type, element, fun);
    }

第二种实现惰性载入的范式是在声明时就指定适当的函数,这样第一次调用是就不会损失性能了,而在代码首次加载时会损失一点性能。
方式二实现

function addEvent(type, element, fun) {
      if (element.addEventListener) {
        return function (type, element, fun) {
          element.addEventListener(type, fun, false);
        }
      }
      else if (element.attachEvent) {
        return function (type, element, fun) {
          element.attachEvent('on' + type, fun);
        }
      }
      else {
        return function (type, element, fun) {
          element['on' + type] = fun;
        }
      }
    }

参考

《JavaScript高级程序设计(第3版)》——第22章高阶技巧中惰性载入函数。

通过以上的方式希望你能对惰性(载入)函数有一定的理解。


听说分享关注的人都年薪百万了image.png

这里是前端扫地僧,和你一起分享前端的那些事。

相关文章
|
4月前
|
前端开发
高阶组件和高阶函数是什么
高阶组件和高阶函数是什么
25 0
|
4月前
|
Python
Python学习 -- 高阶、闭包、回调、偏函数与装饰器探究
Python学习 -- 高阶、闭包、回调、偏函数与装饰器探究
20 0
|
4月前
|
前端开发 JavaScript 数据安全/隐私保护
第十一章 使用高阶函数和非高阶函数对组件进行优化
第十一章 使用高阶函数和非高阶函数对组件进行优化
|
10月前
|
机器学习/深度学习 设计模式 JavaScript
|
12月前
手写函数柯里化原理
手写函数柯里化原理记录
40 1
|
存储 前端开发 JavaScript
✨从延迟处理讲起,JavaScript 也能惰性编程?
我们从闭包起源开始、再到百变柯里化等一票高阶函数,再讲到纯函数、纯函数的组合以及简化演算;
|
缓存 前端开发 Java
函数式编程的Java编码实践:利用惰性写出高性能且抽象的代码
本文会以惰性加载为例一步步介绍函数式编程中各种概念,所以读者不需要任何函数式编程的基础,只需要对 Java 8 有些许了解即可。
函数式编程的Java编码实践:利用惰性写出高性能且抽象的代码
|
存储 消息中间件 分布式计算
惰性函数|学习笔记
快速学习惰性函数。
135 0
惰性函数|学习笔记
|
前端开发 JavaScript
react中高阶函数与高阶组件的运用—(上)(案例详细解释高阶函数)
学习react的同学多多少少对高阶组件有所耳闻,想要学好高阶组件就必须先学好高阶函数的运行,本篇文章就先从高阶函数着手,带大家学习高阶函数和高阶组件的运用
|
前端开发 JavaScript
彻底搞清高阶函数与高阶组件的关系
大家知道在React和Vue中都存在高阶组件。尤其是在React应用更为普遍一些。其实高阶组件的定义来源于高阶函数。首先我们先看看什么是高阶函数。
239 0