JavaScript
中一切都是对象,这句话同样适用于函数。函数对象可以作为函数的参数。
函数对象作为另一个函数的参数
一个函数(为方便行文,称为a
函数)可以作为另外一个函数(称为b
函数)的参数,b
函数最终可以返回一个具体的值。
从原理上来说,b
函数在自己的函数体内调用了a
函数,所以需要把a
函数的名字作为实际参数传递给b
函数。如下:
//求最大值
function getMax(a,b) {
return a>b?a:b;
}
//求最小值
function getMin(a,b) {
return a<b?a:b;
}
//下面这个函数以函数作为参数,并最终返回一个值
function getM(func,num1,num2) {
return func(num1,num2);
}
getM(getMax,1,2);//返回2
getM(getMin,1,2);//返回1
我们把a
函数的名字(getMax
或者getMin
)传给b
函数(getM()
),然后在b
函数内部调用闯入的a
函数,得到相关的结果。
编程要求
本关的编程任务是补全右侧代码片段中Begin
至End
中间的代码,具体要求如下:
-
已知
getOddNumber(a)
求数组a
中奇元素的个数,getEvenNumber(a)
求数组a
中偶元素的个数; -
完成函数
getNumber(func,a)
,实现:根据函数参数func
的不同,求数组a
中奇元素的个数或者偶元素的个数; -
上一条提到的
func
的值只有可能是getOddNumber
或者getEvenNumber
。 -
//求数组中奇数元素的个数
function getOddNumber(a) {
var result = 0;
for(var i = 0;i < a.length;i++) {
if(a[i]%2 != 0)
result++;
}
return result;
}
//求数组中偶数元素的个数
function getEvenNumber(a) {
var result = 0;
for(var i = 0;i < a.length;i++) {
if(a[i]%2 == 0)
result++;
}
return result;
}
function getNumber(func,a) {
//请在此处编写代码
/********** Begin **********/
if (func === getOddNumber)
return getOddNumber(a);
else return getEvenNumber(a);
/********** End **********/
}
//测试接口
function mainJs(b,a) {
a = a.split(",");
var aLength = a.length;
for(var i = 0;i < aLength;i++) {
a[i] = parseInt(a[i]);
}
if(b == "getEvenNumber") {
return getNumber(getEvenNumber,a);
} else {
return getNumber(getOddNumber,a);
}
}