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

        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,鼠标事件

最新文章

  1. SD卡读写一些函数
  2. Mysql在高并发情况下,防止库存超卖而小于0的解决方案
  3. 为win7添加ubuntu的启动引导项
  4. JQuery中的事件以及动画
  5. C#.Net 如何动态加载与卸载程序集(.dll或者.exe)4-----Net下的AppDomain编程 [摘录]
  6. 硝烟中的Scrum和XP-我们如何实施Scrum 15)多团队 Part 2/2 16)地理分散 17)检查列表 18)其他
  7. Python学习笔记四,dict和set
  8. C++对C语言的非面向对象特性扩充(3)
  9. [Swust 549]--变位词(vector水过)
  10. char 与 varchar 不同,造成的麻烦
  11. 细说 ASP.NET Cache 及其高级用法【转】
  12. 599. Minimum Index Sum of Two Lists
  13. 提取Chrome插件为crx文件
  14. C#基础加强(3)之值、引用类型及结构体
  15. jquery无刷新文件上传 解决IE安全性问题
  16. ubuntu16.04(64位)建立交叉编译环境,并配置编译内核
  17. master线程的主循环,后台循环,刷新循环,暂停循环
  18. webpack4+Vue搭建自己的Vue-cli
  19. Hibernate 基于主键的一对一关联关系随手记
  20. jade 入门

热门文章

  1. MySQL5.7 GTID在线开启与关闭【转】
  2. centos7和centos6的区别【转】
  3. MVC 控制器中传递dynamic(对象) 给视图
  4. 一些对外的服务(例如lnmp)都不用root执行
  5. tensorflow实现猫狗大战(分类算法)
  6. java 内部类和向上转型
  7. Java编程的逻辑 (65) - 线程的基本概念
  8. vue报错 ModuleBuildError: Module build failed: Error: `sass-loader` requires `node-sass` >=4. Please install a compatible version.
  9. requireJS2
  10. 微信小程序实现即时通信聊天功能的实例代码