美文网首页
高阶函数

高阶函数

作者: lateryu | 来源:发表于2018-09-14 16:23 被阅读0次

    高阶函数

    1. 高阶函数的必须满足一下条件之一

    1. 函数可以作为参数被传递

    2. 函数可以作为返回值被输出

    1. 面向切面编程(AOP)

    主要作用是把一些核心业务逻辑模块无关的功能抽象处理

    1. 函数柯理化

    又称部分求值,一个柯里化函数首先会接受一些参数,接受参数之后,该函数不会立即求值,而是继续返回另一个函数,刚才传入的参数在函数形成的闭包中被保存,待到函数真正需要求值的时候,之前传入的所有参数都会被一次性用于求值

    1. 函数节流

    javascript 中的函数大多是用户主动触发的,一般不会有性能问题,但是在有些场景下,函数有可能被频繁的调用,而造成性能问题, 比如: window.onresize事件,mousemove事件,上传进度等, 函数节流的原理:由于函数触发频率太高造成的性能问题,解决方法就是降低触发频率,或者或略一部分变化延迟执行函数

    
        var throttle = function (fn, interval) {
    
            var _self = fn, // 保存需要被延迟执行的函数的引用
    
                timer,
    
                firstTime = true; // 是否第一次调用
    
            return function () {
    
                var args = arguments,
    
                    _me = this;
    
                if (firstTime) { // 如果是第一次,不需要延迟执行
    
                    _self.apply(_me, args);
    
                    return firstTime = false;
    
                }
    
                if (timer) {
    
                    // 如果定时器还在说明前一次延迟执行还没有完成
    
                    return false;
    
                }
    
                timer = setTimeout(function () {
    
                    clearTimeout(timer);
    
                    timer = null;
    
                    _self.apply(_me, args);
    
                }, interval || 500);
    
            }
    
        }
    
        window.onresize = throttle(function () {
    
            console.log('1');
    
        }, 500)
    
    ```
    
    4. 分时函数
    
    > 有的时候函数的频繁调用是我们需要的,但是这些函数的频繁调用会影响页面性能,这个时候为了避免引起浏览器卡顿,就需要将工作分批进行,将时间拉开。
    
    5. 惰性加载函数
    
    > 针对一些有浏览器兼容问题的方法,我们通常需要在调用方法前做出判断,频繁的调用函数判断会增加额外的开销,这个时候就需要使用惰性加载函数,在第一使用的时候进行兼容想判断,然后将所得结果直接赋值给这个函数,覆盖,这样下一次调用的时候就不需要判断了
    
    ```js
    
        var addEvent = function (elem, type, handler) {
    
            if (window.addEventListener) {
    
                addEvent = function (elem, type, handler) {
    
                    elem.addEventListener(type, handler, false);
    
                }
    
            } else if (window.attachEvent) {
    
                addEvent = function () {
    
                    elem.attachEvent('on' + type, handler);
    
                }
    
            }
    
            addEvent(elem, type, handler); // 这里是将结果赋值给自己
    
        }
    
        var div = document.getElementById('box');
    
        addEvent(div, 'click', function () {
    
            console.log('div click');
    
        })
    
    

    相关文章

      网友评论

          本文标题:高阶函数

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