美文网首页
JavaScript:惰性函数

JavaScript:惰性函数

作者: 前小小 | 来源:发表于2021-06-15 15:03 被阅读0次

前言

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

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

<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方法,如果还不支持,就用 dom0 级的方法添加事件。

这个过程,在 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>

相关文章

  • 前端_JavaScript

    JavaScript 专题之惰性函数 JavaScript 专题系列第十五篇,讲解惰性函数 需求 我们现在需要写一...

  • JavaScript惰性函数

    惰性函数 定义: 惰性函数,函数内部有许多判断来来检测函数,这样多次调用会浪费时间和浏览器资源,所有当第一次判断完...

  • JavaScript惰性函数

    背景 在开发过程中,有时候需要对浏览器环境进行检测,比如封装一个AJAX函数的时候需要写一个函数进行检测,但是常规...

  • JavaScript:惰性函数

    前言 什么是惰性函数?惰性函数表示函数执行的分支只会在函数第一次调用的时候执行,在第一次调用过程中,该函数会被覆盖...

  • JavaScript

    JavaScript高级函数 惰性函数 函数柯里化 级联函数(链式函数) 设计模式 单例模式 构造函数模式 工厂模...

  • JS高级函数

    高级函数 在 JavaScript 中使用函数的高级方法。 数据类型的安全检测 构造函数的安全作用域 惰性载入函数...

  • javaScript性能优化之代码优化

    利用函数的惰性载入提高 javaScript 代码性能 在 javaScript 代码中,因为各浏览器之间的行为的...

  • 解析JavaScript惰性载入函数

    惰性载入函数表示函数执行的分支仅会发生一次,有两种实现惰性载入函数的方式,第一种是在函数被调用时再处理,在第一次调...

  • 解析JavaScript惰性载入函数

    惰性载入函数表示函数执行的分支仅会发生一次,有两种实现惰性载入函数的方式,第一种是在函数被调用时再处理,在第一次调...

  • 『JavaScript专题』之惰性函数

    需求 我们现在需要写一个 foo 函数,这个函数返回首次调用时的 Date 对象,注意是首次。 解决一:普通方法 ...

网友评论

      本文标题:JavaScript:惰性函数

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