偏
函数是
JS 函数柯里化运算的一种特定应用场景。简单描述,就是把
一个函数的某些参数先固化,也就是设置
默认值,返回
一个新的
函数,在新
函数中继续接收剩余参数,这样
调用这个新
函数会更简单。
示例1
下面是
一个类型检测
函数,接收两个参数,第 1 个表示类型字符串,第 2 个表示检测的数据。
var isType = function (type,obj) { //偏函数
return Object.prototype.toString.call(obj) == '[object ' + type + ']';
}
该
函数包含两个设置参数,使用时比较繁琐。一般常按以下方式进行设计。
var isstring = function (obj) {
return Object.prototype.toString.call(obj) == '[object String]';
};
var isFunction = function (obj) {
return Object.prototype.toString.call(obj) == '[object Function]';
};
函数接收的参数单一,检测的
功能也单一和明确,这样更便于在表达式运算中有针对性的
调用。下面对 isType()
函数进行扁平化设计,
代码如下:
var isType = function (type) {
return function (obj) {
return Object.prototype.toString.call(obj) == '[object ' + type + ']';
}
}
然后根据 JS 偏
函数获取不同类型检测
函数。
var isstring = isType("String"); //专一功能检测函数,检测字符串
var isFunction = isType("Function"); //专一功能检测函数,检测字符串
应用
代码如下:
console.log(isstring("12")); //true
console.log(isFunction(function () {})); //true
console.log(isFunction({})); //false
示例2
下面示例设计
一个 wrap() 偏
函数,该
函数的主要
功能是产生
一个 HTML 包裹
函数,即样式
标签。
function wrap(tag) {
var stag = '<' + tag + '>';
var etag = '</' + tag.replace(/s.*/,'') + '>';
return function(x) {
return stag + x + etag;
}
}
var b = wrap('b');
document.write(b('粗体字'));
var i = wrap('i');
document.write(i('斜体字'));
var u = wrap('u');
document.write(u('下划线字'));