美文网首页
JS 惰性函数

JS 惰性函数

作者: Cherry丶小丸子 | 来源:发表于2024-08-24 00:44 被阅读0次

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

惰性函数的本质就是函数重写,所谓惰性载入,指函数执行的分支只会发生一次。那什么时函数重写呢?由于一个函数可以返回另一个函数,因此可以用新的函数在覆盖旧的函数

<script>
    function a() {
        console.log('a');
        a = function () {
            console.log('b');
        }
    }
    a(); //q
    a(); //b
</script>

第一次调用这个函数时 console.log('a') 会被执行,打印出 a,全局变量 a 被重定义并被赋予了新的函数,当再一次调用时,console.log('b') 被执行

用处:因为各浏览器之间的行为差异,经常会在函数中包含了大量的 if 语句,以检查浏览器特性,解决不同浏览器的兼容问题

<script>
    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;
        }
    }
</script>

每次调用 addEvent 函数的时候,它都要对浏览器所支持的能力进行检查,首先检查是否支持 addEventListener 方法,如果不支持,再检查是否支持 attachEvent 方法,如果还不支持,就用 dom 0 级的方法添加事件

这个过程,在 addEvent 函数每次调用的时候都要走一遍,其实,如果浏览器支持其中的一种方法,那么它就会一直支持了,就没有必要再进行其他分支的检测了。也就是说,if 语句不必每次都执行,代码可以运行的更快一些

惰性函数有两种实现方式:
1、在函数被调用时,再处理函数。函数在第一次调用时,该函数会被覆盖为另外一个按合适方式执行的函数,这样任何对原函数的调用都不用再经过执行的分支了
<script>
    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;
            }
        }
        return addEvent(type, element, fun);
    }
</script>

在这个 addEvent() 中,if 语句的每个分支都会为 addEvent 变量赋值,有效覆盖了原函数。最后一步便是调用了新赋函数。下一次调用 addEvent() 时,便会直接调用新赋值的函数,这样就不用再执行 if 语句了

2、声明函数时就指定适当的函数
<script>
    var addEvent = (function () {
        if (document.addEventListener) {
            return function (type, element, fun) {
                element.addEventListener(type, fun, false);
            }
        }
        else if (document.attachEvent) {
            return function (type, element, fun) {
                element.attachEvent('on' + type, fun);
            }
        }
        else {
            return function (type, element, fun) {
                element['on' + type] = fun;
            }
        }
    })();
</script>

原文地址:https://www.cnblogs.com/davina123/p/12024347.html

相关文章

  • 惰性函数

    今天啊看到一篇讲js性能优化---惰性函数的文章,之前没听过这个。 主要应用在提高js的执行效能上,主要也是应用在...

  • 惰性函数

    惰性函数按照《高程》里面讲解,主要用来屏蔽浏览器之间的差异。其实,也可以用来实现单例。所以惰性函数主要的作用:环境...

  • 惰性函数

    惰性函数它比较懒,不会立即执行。只有需要的时候才去执行创建或加载一些资源对象。举个简单的例子。最近登录流行微信登录...

  • 惰性函数

    无论这个函数调用多少次,返回的都是第一次调用时候的结果。惰性函数的意思就是,这个事儿我做了一次之后就再也不做了,你...

  • 惰性函数

    addEventListener 事件函数封装

  • js面向对象之 惰性函数和即时函数

    惰性函数定义: 特点是在第二次调用函数的时候这个函数才被正确的定义。第一次调用函数的时候只是做一些初始化的处理 特...

  • JS专题系列之惰性函数与记忆函数

    一、惰性函数 惰性函数:顾名思义就是懒惰的函数,举一个简单的例子,如果我们需要判断当前浏览器是哪一种浏览器,我们需...

  • JS性能优化之惰性加载函数

    前端开发不可避免的会有跨浏览器的需求,为了兼容各浏览器,绝大时候我们的处理方式都是用几个if...else或者tr...

  • JavaScript 05 函数

    js函数的概念和作用,js函数的定义,js函数的调用,js事件驱动的概念,js函数的实参和形参,js的作用域,js...

  • 04 js高阶函数(惰性函数、柯里化函数、compose函数)和

    高阶函数的定义 在《javascript设计模式和开发实践》中是这样定义的。 函数可以作为参数被传递; 函数可以作...

网友评论

      本文标题:JS 惰性函数

      本文链接:https://www.haomeiwen.com/subject/paugkjtx.html