高阶函数

2018-09-14  本文已影响0人  lateryu

高阶函数

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');

    })

上一篇 下一篇

猜你喜欢

热点阅读