JS中,函数时一种特殊的对象,用typeof来判断的话是一个function的对象,可以将函数付给一个变量,这个变量也可以传递给别的变量,最后这个函数还可以作为参数传递给别的函数,甚至还可以作为别的函数的返回值。
对其他函数进行操作的函数(参数是函数或者返回值是函数)
典型示例:JS中原生自带的:Array.prototype.map,Array.prototype.filter,Array.prototype.reduce等
内置高阶函数的简单使用:
首先,map()的返回值是一个数组,操作的也是一个数组,但是他的参数是一个函数。
如操作每一个数组元素*2:
let arr1 = [1,2,3];
let arr2 = arr1.map(item => item * 2);
//arr2 = [2,4,6];
filter() 方法会创建一个新数组,其中包含所有通过回调函数测试的元素。 传递给 filter() 方法的回调函数接受3个参数:element,index 和 array。
let persons = [{name:'zhangsan',sex:'men'},{name:'lishi',sex:'men'},{name:'limei',sex:'women'}];
let womens = persons.filter(person => person.sex == 'women');
//womens = [{name:'limei',sex:'women'}];
reduce 方法对调用数组的每个元素执行回调函数,最后生成一个单一的值并返回。 reduce 方法接受两个参数:1)reducer 函数(回调),2)一个可选的 initialValue。
reducer 函数(回调)接受四个参数:accumulator,currentValue,currentIndex,sourceArray。
如果提供了 initialValue,则累加器将等于 initialValue,currentValue 将等于数组中的第一个元素。
如果没有提供 initialValue,则累加器将等于数组中的第一个元素,currentValue 将等于数组中的第二个元素。
A
var arr= [1,2,3,4,56,6];
var sum = arr.reduce((sum1,currentValue) => sum1+currentValue);
//sum = 72;
B
var arr= ['tian','zhao','li'];
var arrs = arr.reduce((arrs,currentValue) => arrs+','+currentValue);
//arrs="tian,zhao,li";
假设我们有一个字符串数组,我们希望把它转换为整数数组,其中每个元素代表原始数组中字符串的长度。
var arr = ['wwwwwww','qwe'];
function mapForEach(arr,fn){
var newarr = [];
for(let i = 0;i