由于浏览器兼容性问题,js中经常会有大量的能力监测相关的if语句。这种分支的特点是对于特定的环境,每次调用时分支的结果都不会变化。那么这种反复测试就没有必要了,即使只有一个if语句也比没有的慢...
惰性载入表示函数执行的分支仅会发生一次。有两种实现方式:  
函数被调用时再处理函数
function test() {
    if (supportFlag) {
        test = function() { ... };
    } else {
        test = function() { ... };
    }
    return test();
}在声明函数时指定适当的函数
var test = (function() {
    if (supportFlag) {
        return function() { ... };
    } else {
        return function() { ... };
    }
})();柯里化(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()函数