有时候,把函数作为参数可以让代码更简洁。
var calculator = {calculate: function(x, y, fn) {return fn(x, y);}};var sum = function(x, y) { return x + y; },diff = function (x, y) { return x - y; };var sumResult = calculator.calculate(2, 1, sum),diffResult = calculator.calculate(2, 1, diff);alert(sumResult + " " + diffResult);
变量sum和diff代表的函数参数和calculator对象的calculate方法的前2个参数保持一致。
□ 数组的every, some, filter方法参数可以是函数
var fruit = ["apples", "oranges", "bananas", "grapes"];//判断是否是字符串function isString(value, index, array) {return typeof value == "string";}//判断每个数组长度是否为1function isLengthOne(value, index, array) {return value.length === 1;}//判断是否有g开头的function startsWithG(value, index, array) {return value[0] === "g";}//过滤以a和b开头的数组元素function startsWithAB(value, index, array) {return value[0] === "a" || value[0] === "b";}var result = fruit.filter(startsWithAB);//打印alert(fruit.every(isString));//判断每个数组元素的类型alert(fruit.every(isLengthOne));//判断是否每个数组元素都为1alert(fruit.some(startsWithG));//判断是否有一些以G开头alert(result); //过滤结果
以上,every, some, filter方法参数大致是every(value, index, array, fn),所以自定义函数的参数必须和这前3个参数保持一致。
□ 数组的forEach, map方法参数可以是函数
※ 数组的forEach方法
var fruit = ["apples", "oranges", "bananas", "grapes"];function doSth(value, index, array) {alert(value);}fruit.forEach(doSth);
forEach方法,只针对数组元素进行操作,不返回新的数组。
※ 数组的map方法
var fruit = ["apples", "oranges", "bananas", "grapes"];function doMap(value, index, array) {return "i like " + value;}var result = fruit.map(doMap);alert(result);
map方法,不仅对数组元素操作,而且返回新的数组。
“JavaScript进阶系列”包括: