函数的定义
函数本质上是自变量和因变量之间关系的一种抽象描述,在JavaScript中我们这样定义一个函数:
function add(a,b){ return a + b; }
上述add函数的定义如下:
- function指出这是一个函数定义;
- add是函数的名称;
- (a,b)括号内列出函数的参数,多个参数以,分隔;
- { ... }之间的代码是函数体,可以包含若干语句,甚至可以没有任何语句。
请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。 如果没有return语句,函数执行完毕后也会返回结果,只是结果为undefined。
还有另外一种定义函数的方式:
var add = function(a,b){ return a + b; }
上述代码所示,function(){...}函数是一个匿名函数。将一个匿名函数赋值给一个变量,我们就可以使用它对函数进行调用。两种定义函数的方法是 等价的。
arguments
在函数体的内部,我们可以通过一个内置的arguments关键字查看函数被调用时的所有参数。
function getArgs(a,b){ //只有a,b接收到了参数 console.log(a,b); for (let arg of arguments){ console.log("arg:",arg); } } getArgs(2,4,6); //参数a等于2,参数b等于4,arguments 包含2,4,6 getArgs(2); //参数a等于2,参数b等于undefined,arguments 只有2
可变参数
如果函数接收的参数列表长度是不确定的,我们可以引入一个可变参数接收,方便对参数的操作
function getVarArgs(a,b,...rest){ console.log(a,b); if (rest){ for (let item of rest){ console.log(item) } } } getVarArgs(11,14); getVarArgs(11,14,17,18);
上述代码所示,如果a,b参数是确定的,而后续的参数是不确定的,就可以用...rest的可变参数进行接收。在函数体内部rest可以看成是一个数组, 操作非常方便。
高阶函数
定义函数的时候,我们把匿名函数赋值给了一个变量。实际上,在JavaScript中,我们可以把一个函数等同于一个变量看待。在定义函数的时候,函数的参数可以接收一个变量,当然也可以接收另外一个函数作为它的参数。我们 把这个接收函数参数的函数称为高阶函数。这个定义听起来似乎有些拗口,请看如下示例:
function add(a,b,func){ return func(a) + func(b); } add(-10,2,Math.abs); //返回12
上述代码中,add就是一个高阶函数,它接收两个数字和一个函数。
map()
JavaScript中,绑定到对象上的函数我们通常成为方法。map()作为数组的一个映射方法,实际上是一个函数,它可以接收一个函数作为参数。
// 映射函数 var array = [3,6,7,8,9]; var r = array.map(function(x){ return x*x; }) r; //返回[9,36,49,64,81]
上述代码所示,数组的map方法接收了一个函数,这个函数的功能是接收一个数字,经过处理再输出这个数字的平方。
reduce()
reduce()是数组的一个聚合方法,它将数组所有的元素进行聚合。
var array = [3,6,7,8,9]; var r = array.reduce(function(s,x){ return s = s + x; },0) r; //返回 33
上述代码显示,数组的reduce方法接收了一个函数,这个函数的第一个参数是聚合的结果,第二个参数是数组的元素。reduce方法的另一个参数表示聚合的初始值,可省略,默认为0。
filter()
filter()是数组的一个过滤方法,他将数组的所有元素按给定的规则进行过滤。
var array = [3,6,7,8,9]; var r = array.filter(function(x){ return x>6; }); r; //返回[7,8,9]
sort()
sort()是数组的一个排序方法,它将数组的所有元素按给定的规则进行排序。
var r = ["1.81","1.78","1.83","1.75","1.86","1.72"]; r.sort(function(a,b){ return parseFloat(a)-parseFloat(b); }) r; //返回["1.72","1.75","1.78","1.81","1.83","1.86"]
上述代码显示,sort方法接收了一个比较函数。
find()
find()是数组的一个查找方法,它查询数组中满足给定条件的第一个元素
var array = [3,6,7,8,9]; var r = array.find(function(x){ return x>7; }) r; //8
其它
findIndex()查询数组中满足给定条件的第一个元素的索引,every()确定数组中的所有元素是否满足给定条件
var array = [3,6,7,8,9]; var r = array.findIndex(function(x){ return x>7; }) r; //3 var r1 = array.every(function(x){ return x > -2 ; }); r1; //true;
文章同时发表在:码农编程网 欢迎访问
本节重点:
- js函数的定义
- 什么是高阶函数,高阶函数的定义和使用;
- 常见的高阶函数和应用。