JS偏函数

函数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('下划线字'));

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...