函数的多变来源于参数的灵活多变和返回值的多变。如果参数是一般的数据类型或一般对象,这样的函数就是普通函数;如果函数的参数是函数,这就是我们所要知道的高级函数;如果创建的函数调用另外一部分(变量和参数已经预置),这样的函数就是偏函数。
函数的分类
普通函数
有函数名,参数,返回值,同名覆盖。示例代码如下:
function add(a, b) { return a + b; }
匿名函数
没有函数名,可以把函数赋值给变量和函数,或者作为回调函数使用。非常特殊的就是立即执行函数和闭包。
立即执行函数示例代码如下:
(function(){ console.log(1) })()
闭包示例代码如下:
var func = (function() { var i = 1; return function() { console.log(i); } })()
高级函数
高级函数就是可以把函数作为参数和返回值的函数。如上面的闭包。ECMAScript中也提供大量的高级函数如forEach(), every(), some(), reduce()等等。
some()
定义和⽤法
some() ⽅法⽤于检测数组中的元素是否满⾜指定条件(函数提供)。
some() ⽅法会依次执⾏数组的每个元素:如果有⼀个元素满⾜条件,则表达式返回true, 剩余的元素不会再执⾏检测。如果没有满⾜条件的元素,则返回false。
注意:
some() 不会对空数组进⾏检测。 some() 不会改变原始数组。
var number = [12,23,14,21];
//some 方法
function checkNum(num){
return num==23;
}
function testSome(){
if(number.some(checkNum)){
console.log(1212);
}
}
testSome();
reduce()
定义和用法
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。
var number = [12,23,14,21];
//reduce 方法
function gettotal(total,num){
return total+num;
}
function testtotal(){
console.log(number.reduce(gettotal));
}
every()
定义和用法
every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。
every() 方法使用指定函数检测数组中的所有元素:
- 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
- 如果所有元素都满足条件,则返回 true。
注意: every() 不会对空数组进行检测。
注意: every() 不会改变原始数组。
//every 方法
function checkNum(num){
return num>=23;
}
function testSomes(){
if(number.every(checkNum)){
console.log(true);
}else{
console.log(false);
}
}
testSomes();
<!--其他后续添加-->