js-回调函数(高阶函数)

JavaScript022

js-回调函数(高阶函数),第1张

初次接触回调函数的时候,总是一直纳闷什么是回调函数,首先我们先弄清楚什么是回调函数?

在弄懂回调函数的之前我们要先弄懂什么是高阶函数:所谓高阶函数, 就是值函数的一个参数是函数(这个参数就是回调函数) , 或者函数的返回值是函数 , 满足这两个的其中一个 就是 高阶函数

   首先我们可以通过一组案例实现:

   //然后定义一个myFor(可以随便定义)函数,这个函数需要传两个参数:数组,回调函数。注意这里的myFore就是我们后期如果定义回调函数的一个方法名,图中的callback的意思就是回调函数所在的位置,只不过我们平常都习惯用callback这个名义去定义回调函数,参数名不固定。

这里我们通过一个例子去实现我们是如何调用回调函数的:

最后的答案是:

说的是高阶函数吧

/**

* 高阶函数 - 操作函数的函数,可以把一个或者多个函数作为参数,并返回一个新的函数;

*/

function not(f){

return function(){ // 这里 return 的是函数哦

/*var result = !f.apply(this,arguments)

if(!result){

console.log(arguments[0])

}

return result*/

return !f.apply(this,arguments)

}

}

/* 数组 every 方法的回调函数,这个方法有三个参数:

* value(当前元素的值)、

* index(当前元素的索引)、

* array(数组实例)。

*/

function even(value, index, ar) {

/*var result = value % 2 === 0

if(!result){

console.log(arguments[0])

}

return result*/

return value % 2 === 0

}

var arr = [2, 5]

/**

* every 方法会按升序顺序对每个数组元素调用一次传入 callback 函数,直到 callback 函数返回 false;

* 如果找到导致 callback 返回 false 的元素,则 every 方法会立即返回 false。 否则,every 方法返回 true;

* 如果 callback 参数不是函数对象,则将引发 TypeError 异常;

* thisArg 可选。可在 callback 函数中为其引用 this 关键字的对象。

* 如果省略 thisArg,则 undefined 将用作 this 值。

* eg. array1.every(callback[, thisArg])

*/

if (arr.every(even)) {

console.log("All are even.")

} else {

console.log("Some are not even.")

}

if (arr.every(not(even))) {

console.log("All are odd.")

} else {

console.log("Some are not odd.")

}

不用

高阶函数

编辑

原理

在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:

接受一个或多个函数作为输入

输出一个函数

在数学中它们也叫做算子(运算符)或泛函。微积分中的导数就是常见的例子,因为它映射一个函数到另一个函数。

在无类型 lambda演算,所有函数都是高阶的;在有类型 lambda演算(大多数函数式编程语言都从中演化而来)中,高阶函数一般是那些函数型别包含多于一个箭头的函数。在函数式编程中,返回另一个函数的高阶函数被称为柯里化的函数。

在很多函数式编程语言中能找到的 map 函数是高阶函数的一个例子。它接受一个函数 f 作为参数,并返回接受一个列表并应用 f 到它的每个元素的一个函数。[1]

范例

高阶函数的其他例子包括函数复合、积分和常量函数 λx.λy.x。

这是一个Python的例子, 其中函式 g() 有一引数以及回传一函数. 这个例子会打印 100 ( g(f,7)= (7+3)×(7+3) ).

12345   def f(x):return x + 3def g(function, x):return function(x) * function(x)print g(f, 7)