JavaScript进阶系列02,函数作为参数以及在数组中的应用
2024-10-15 10:36:42
有时候,把函数作为参数可以让代码更简洁。
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进阶系列”包括:
JavaScript进阶系列01,函数的声明,函数参数,函数闭包
JavaScript进阶系列02,函数作为参数以及在数组中的应用
JavaScript进阶系列03,通过硬编码、工厂模式、构造函数创建JavaScript对象
JavaScript进阶系列04,函数参数个数不确定情况下的解决方案
JavaScript进阶系列05,事件的执行时机, 使用addEventListener为元素同时注册多个事件,事件参数
JavaScript进阶系列06,事件委托
JavaScript进阶系列07,鼠标事件
最新文章
- SD卡读写一些函数
- Mysql在高并发情况下,防止库存超卖而小于0的解决方案
- 为win7添加ubuntu的启动引导项
- JQuery中的事件以及动画
- C#.Net 如何动态加载与卸载程序集(.dll或者.exe)4-----Net下的AppDomain编程 [摘录]
- 硝烟中的Scrum和XP-我们如何实施Scrum 15)多团队 Part 2/2 16)地理分散 17)检查列表 18)其他
- Python学习笔记四,dict和set
- C++对C语言的非面向对象特性扩充(3)
- [Swust 549]--变位词(vector水过)
- char 与 varchar 不同,造成的麻烦
- 细说 ASP.NET Cache 及其高级用法【转】
- 599. Minimum Index Sum of Two Lists
- 提取Chrome插件为crx文件
- C#基础加强(3)之值、引用类型及结构体
- jquery无刷新文件上传 解决IE安全性问题
- ubuntu16.04(64位)建立交叉编译环境,并配置编译内核
- master线程的主循环,后台循环,刷新循环,暂停循环
- webpack4+Vue搭建自己的Vue-cli
- Hibernate 基于主键的一对一关联关系随手记
- jade 入门
热门文章
- MySQL5.7 GTID在线开启与关闭【转】
- centos7和centos6的区别【转】
- MVC 控制器中传递dynamic(对象) 给视图
- 一些对外的服务(例如lnmp)都不用root执行
- tensorflow实现猫狗大战(分类算法)
- java 内部类和向上转型
- Java编程的逻辑 (65) - 线程的基本概念
- vue报错 ModuleBuildError: Module build failed: Error: `sass-loader` requires `node-sass` >;=4. Please install a compatible version.
- requireJS2
- 微信小程序实现即时通信聊天功能的实例代码