函数作为参数和返回值使用
JS中函数是一等公民(函数作为参数、返回值)
高阶函数:一个函数如果接收另外一个函数作为参数,或者该函数会返回另外一个函数作为返回值,那么这个函数就称之为是高阶函数
// 函数作为参数使用
function calc(a,b,calcFn){
console.log(calcFn(a,b))
}
function add(a,b){
return a+b
}
function sub(a,b){
return a-b
}
var m = 20
var n = 10
calc(m,n,add) //30
calc(m,n,sub) //10
// 函数作为返回值使用
// js 语法允许函数内部再定义函数
function foo() {
function bar() {
console.log("bar")
}
return bar
}
var fn = foo() //fn = bar
fn()
function makeAdder(count){
function add(num){
return count + num
}
return add
}
var add5 = makeAdder(5)
console.log(add5(6))
数组中的常见高阶函数
函数和方法的区别:
函数function:独立的function,那么称之为是一个函数
function() { }
方法method:当我们的一个函数属于某一个对象时, 我们称这个函数是这个对象的方法
var obj = { foo : function() { } } obj.foo()
- filter:过滤
// 筛选数组中的偶数
var nums = [10,5,11,100,55]
// filter中传入一个回调函数,返回值必须是boolean ,参数:item、index、array
// item:数组中的每一项
// idnex:下标,索引值
// array:数组
var newNums = nums.filter(function (item) {
return item % 2 === 0
})
console.log(newNums)
- map:映射
var newNums2 = nums.map(function(item) {
return item * 10
})
console.log(newNums2) // [100,50,110,1000,550]
- forEach:迭代
// 没有返回值 遍历
nums.forEach(function(item) {
console.log(item)
})
- find/findIndex:查找
var friends = [
{name: "why", age: 18},
{name: "kobe",age: 40},
{name: "james",age: 35},
{name: "curry",age: 30} ,
]
var findFriend = friends.find( function(item) {
return item.name === 'james'
})
var friendIndex = friends.findIndex( function(item) {
return item.name === 'james'
})
console.log(findFriend) // {name: "james",age: 35}
console.log(friendIndex) // 2
- reduce:累加
// previousValue :上一次函数的返回值
// initialValue:初始值 0
var total = nums.reduce(function(previousValue , item) {
return previousValue + item
},0)
console.log(total)