js高阶函数

本文详细介绍了JavaScript中高阶函数的概念,并通过实例展示了如何使用高阶函数进行数据类型判断,实现代码复用和提高代码灵活性。文章还提供了一种升级函数实现的方法,使得代码更加简洁高效。

js高阶函数

在介绍什么是高阶函数之前,先看一下高阶函数的两个特点,了解这两个特点了,也就知道什么是高阶函数了(是不是废话- -!)

  • 函数可以作为参数被传递
  • 函数可以作为返回值输出

现在知道什么是高阶函数了吗?不知道也没问题,接着往下看。

js中的函数显然满足高阶函数的条件,在实际开发中,无论是将函数当作参数传递,还是让函数的执行结果返回另外一个函数,这两种情形都有很多应用场景。我们围绕这两个特点展开说一下:

函数作为参数传递

//TODO

函数作为返回值输出

在工作中,可能会经常要对数据类型进行判断。比如判断是不是一个数组最常用的做法是Object.prototype.toString.call([1,2,3])它的返回值是一个字符串“[object Array]”,判断是否为字符串Object.prototype.toString.call(‘iVan’)返回“[object String]”,然后我们的代码可能是这样的:

var isString = function(obj) {
    return Object.prototype.toString.call(obj) === '[object String]';
};
var isArray = function(obj) {
    return Object.prototype.toString.call(obj) === '[object Array]';
};
var isNumber = function(obj) {
    return Object.prototype.toString.call(obj) === '[object Number]';
};

嗯,是这样的应该。但是呢,我们的小标题叫函数作为返回值输出 这根本没体现出高阶函数的特点阿!然后改了一下,也变的灵活多了:

var isType = function(type) {
    return function(obj) {
        return Object.prototype.toString.call(obj) === '[object ' + type + ']';
    }
};

var isString = isType('String');
var isArray = isType('Array');
var isNumber = isType('Number');
console.log(isArray([1, 2, 3])); //true

是不是舒服多了,又体现了函数作为返回值输出 又减少了多余的代码,最重要的是复用性更高了。

那么问题来了,每次传String Number Array 好麻烦!那我们再升级一下!

;(function(){
    var Type = {};
    for (var i = 0, type; type = ['String', 'Array', 'Number'][i++];) {
        (function(type) {
            Type['is' + type] = function(obj) {
                return Object.prototype.toString.call(obj) === '[object ' + type + ']';
            }
        })(type)
    };
    Type.isArray([]); // 输出:true
    Type.isString("str"); // 输出:true
})();

是不是舒服多了!

结语

本文引用于《js设计模式与开发实践》

### JavaScript 高阶函数的概念和用法 #### 什么是高阶函数 高阶函数是对其他函数进行操作的函数,它可以接受函数作为参数或将函数作为返回值输出[^2]。这意味着在 JavaScript 中,函数可以像其他任何变量一样传递,这得益于 JavaScript 的一等函数特性[^1]。 #### 接受函数作为参数的高阶函数 以下是一个简单的例子,展示了如何将函数作为参数传递给另一个函数: ```javascript function fn(a, b, callback) { console.log(a + b); callback(); } fn(1, 2, function () { alert('hi'); }); ``` 在这个例子中,`fn` 是一个高阶函数,因为它接受了一个回调函数作为参数,并在执行完加法后调用了这个回调函数。 #### 返回函数作为结果的高阶函数 高阶函数也可以返回一个函数作为其结果。这种模式在需要动态生成函数时非常有用。例如: ```javascript var attitude = function(original, replacement, source) { return function(source) { return source.replace(original, replacement); }; }; var snakify = attitude(/好靓仔/ig, "好难看"); var hippify = attitude(/vue/ig, "react"); console.log(snakify("程序员米粉好靓仔")); // 输出: 程序员米粉好难看 console.log(hippify("vue框架是地球最好的框架")); // 输出: react框架是地球最好的框架 ``` 在这个例子中,`attitude` 函数返回了一个新的函数,该函数可以根据传入的正则表达式和替换字符串来修改输入字符串[^4]。 #### 使用高阶函数进行数组操作 JavaScript 提供了许多内置的高阶函数用于数组操作,例如 `map`、`filter` 和 `reduce`。这些函数使得对数组元素的操作更加简洁和高效。 ```javascript function pow(x) { return x * x; } var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; var results = arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81] console.log(results); arr = arr.map(x => { return x * 1; }); ``` 在这个例子中,`map` 方法遍历了数组中的每个元素,并对其应用了 `pow` 函数,最终返回了一个新的数组[^5]。 #### 高阶函数的意义 高阶函数提供了一种更高层次的抽象方式,使代码更加模块化和可重用。通过将函数作为参数或返回值,开发者可以编写更灵活和强大的代码[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值