惰性载入函数

由于浏览器兼容性问题,js中经常会有大量的能力监测相关的if语句。这种分支的特点是对于特定的环境,每次调用时分支的结果都不会变化。那么这种反复测试就没有必要了,即使只有一个if语句也比没有的慢...
惰性载入表示函数执行的分支仅会发生一次。有两种实现方式:

函数柯里化

柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
基本方法就是使用一个闭包返回一个函数。调用另一个函数并为它 传入要柯里化的还书和必要参数。

function curry(fn) {
    var args = Array.prototype.slice.call(arguments, 1);
    return function() {
        var innerArgs = Array.prototype.slice.call(arguments);
        var finalArgs = args.concat(innerArgs);
        return fn.apply(null, finalArgs);
    };
}

同时也可以传入特定参数指定this实现bind()函数