接收一个参数,返回一个固定了该参数的函数。
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'));
柯里化。
在一些函数