JavaScript高阶函数

74 阅读2分钟

函数作为参数和返回值使用

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()

  1. 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)
  1. map:映射
var newNums2 = nums.map(function(item) {
	return item * 10
})
console.log(newNums2) // [100,50,110,1000,550]
  1. forEach:迭代
// 没有返回值 遍历
nums.forEach(function(item) {
	console.log(item)
})
  1. 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
  1. reduce:累加
// previousValue :上一次函数的返回值
// initialValue:初始值 0
var total = nums.reduce(function(previousValue , item) {
	return previousValue  + item
},0)
console.log(total)