JavaScript进阶系列02,函数作为参数以及在数组中的应用

有时候,把函数作为参数可以让代码更简洁。

        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";
        }
        //判断每个数组长度是否为1
        function 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));//判断是否每个数组元素都为1
        alert(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进阶系列”包括:

JavaScript进阶系列01,函数的声明,函数参数,函数闭包

JavaScript进阶系列02,函数作为参数以及在数组中的应用

JavaScript进阶系列03,通过硬编码、工厂模式、构造函数创建JavaScript对象

JavaScript进阶系列04,函数参数个数不确定情况下的解决方案

JavaScript进阶系列05,事件的执行时机, 使用addEventListener为元素同时注册多个事件,事件参数

JavaScript进阶系列06,事件委托

JavaScript进阶系列07,鼠标事件

posted @ 2014-10-03 09:18  Darren Ji  阅读(1086)  评论(0编辑  收藏  举报

我的公众号:新语新世界,欢迎关注。