接收一个参数,返回一个固定了该参数的函数。

function base(a) {
    return a + this.m + 10;
}

function withFn(base, a) {
    var object = { m: 20 }

    return base.bind(object, a);
}

var _base = withFn(base, 10);

_base();
function getLogin() {
    var a = parseInt(Math.random() * 10).toFixed(0));
    if (a % 2 == 0) {
        return false;
    }
    return true;
}

function renderIndex() {
    var login = getLogin();

    if (login) {
        console.log('渲染已经成功登陆之后的页面');
    } else {
        console.log('渲染未登录的页面');
    }
}

function renderBlog() {
    var login = getLogin();
    // ...
}

function withLogin(baseRender) {
    var login = getLogin();

    return baseRender.bind(null, login);
}


// 单一原则  一个函数只负责一件事情
var _renderIndex = withLogin(renderIndex);
_renderIndex();

var _renderBlog = widthLogin(renderIndex);
_renderIndex();
function createCurry(func, arity, args) {
    var arity = arity || func.length;
    var args = args || [];

    function wrapper() {
        var _args = [].slice.call(arguments);
        [].push.apply(args, _args);
        // args.push(..._args);

        if (_args.length < arity) {
            arity -= _args.length;
            return createCurry(func, arity, args);
        }

        return func.apply(func, args);
    }

    return wrapper;
}

function add(a, b, c) {
    return a + b + c;
}
var _add = createCurry(add);

// console.log(_add(1)(2)(3));


var match = createCurry(function(what, str) {
    return str.match(what);
})
console.log(match(/\s+/g, 'hello world'));
console.log(match(/\s+/g)('Hello world'));

柯里化。

在一些函数

results matching ""

    No results matching ""