[JS]函数作为值
在JavaScript中,函数不仅是语法,也是值。这意味着可以把函数赋值给变量、保存为对象的属性或者数组的元素、作为参数传给其他函数。
将函数赋值给变量s
,实际上变量引用的是函数对象。不仅可以通过函数名调用函数,还可以使用(引用了函数的)变量名调用函数:
function square(x) {
return x * x
}
let s = square
square(4) // 16
s(4) // 16
除了变量,也可以将函数赋值给对象的属性:
let o = {
square: function (x) {
return x * x
}
}
函数甚至可以没有名字,而是一个匿名函数,因此可以作为一个数组元素:
let array = [(x) => x * x, 20]
array[0](10) // 100
array[0](20) // 400
array[0](array[1]) // 400
将函数作为值的案例:
定义加法和乘法函数,这两个函数对x
和y
进行操作之后返回一个值。
operate(arg1, arg2, arg3)
函数都接收引用了函数对象的变量作为参数,以便使用变量名调用对应的函数。
// 加法
function add(x, y) {
return x + y
}
// 乘法
function multiply(x, y) {
return x * y
}
/**
* 该函数形参列表都接收一个引用了函数对象的变量作为参数。
* operator可以执行函数,operand1和operand2接收函数返回的值。
*/
function operate(operator, operand1, operand2) {
return operator(operand1, operand2)
}
/**
* 本次案例中:
* 第一个operate函数对2和3数值进行相加并返回;
* 第二个operate函数对4和5进行乘法并返回;
* 最后operate函数对前两个函数进行相加,原因是第一个参数接收的add函数。
*/
let i = operate(add, operate(add, 2, 3), operate(multiply, 4, 5)) // 25
利用图的形式理解该案例:
[JS]函数作为值的更多相关文章
- 由JS函数返回值引发的一场”血案"
---恢复内容开始--- 啊... 本来昨天晚上想写来着,结果陪老婆看电视剧就忘了... 呢滴神啊,原谅我吧. 背景:昨天在项目中做一个小功能的时候,出现了个小问题,而且一开始找了半天也没找到原因. ...
- JS函数 返回值的函数 return sum;或者result = add2(3,4);
返回值的函数 思考:上一节函数中,通过"document.write"把结果输出来,如果想对函数的结果进行处理怎么办呢? 我们只要把"document.write(sum ...
- JSF页面中使用js函数回调后台bean方法并获取返回值的方法
由于primefaces在国内使用的并不是太多,因此,国内对jsf做系统.详细的介绍的资料很少,即使有一些资料,也仅仅是对国外资料的简单翻译或者是仅仅讲表面现象(皮毛而已),它们的语句甚至还是错误的, ...
- (转)js函数参数设置默认值
原文:http://www.cnblogs.com/RightDear/archive/2013/06/26/3156652.html js函数参数设置默认值 php有个很方便的用法是在定义函数时 ...
- js函数参数设置默认值
php有个很方便的用法是在定义函数时可以直接给参数设默认值,如: function simue ($a=1,$b=2){ return $a+$b;}echo simue(); //输出3echo ...
- JS:函数多个参数默认值指定
函数有一个参数时,以往这样定义(参数为p1): function mfun(p1){ … } 当需要为p1设定一个默认值时 function mfun(p1){ if(p1===undefined) ...
- JS异步函数 返回值
1. js 异步的几种情况 : 1.1 异步操作由浏览器内核的 webcore 来执行: onclick 由浏览器内核的 DOM Binding 模块来处理,当事件触发的时候,回调函数会立即添加到任 ...
- 3.3 js函数
1.函数语法: 函数声明的方式:function 函数名(参数1,参数2-){//函数体;}函数调用:函数名(参数1,参数2-); 函数内不一定都指定返回值. 如果需要指定返回值,可用 return ...
- js函数表达式和函数声明的区别
我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义"隐 藏"起来,外部作用域无法访问包装函数内部的任何内容. 例如: var a = 2; function ...
随机推荐
- SqlServer的order by问题
如果指定了 SELECT DISTINCT,那么 ORDER BY 子句中的项就必须出现在选择列表中.这是我昨天写sql的时候遇到的,主要是因为最近在做一个数据库的迁移与更换,原来MySQL的数据库全 ...
- 在js中使用moment将秒转换为多少天多少小时多少分多少秒
let x = 2703750;//单位是秒 var d = moment.duration(x, 'seconds'); console.log(Math.floor(d.asDays()) + ' ...
- javascript的getTime函数
<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...
- Unix、Linux 软件包管理快速入门对照:apt、brew、pkg、yum
请访问原文链接:https://sysin.org/blog/apt-brew-pkg-yum/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www.sysin ...
- Qt 新手实战项目之手把手打造一个串口助手
一前景 很多时候我们在学习一门新的语言,一直在学习各种语法和记住各种关键字,很容易产生枯燥的情绪,感觉学习这些玩意儿不知道用在什么地方,心里很是苦恼,这不,我在这记录下我学习Qt的第一个的小项目-串口 ...
- Zabbix5.0钉钉报警(centos7)
2.1.到钉钉官网下载pc版钉钉,安装.注册.登陆: 钉钉下载地址:https://www.dingtalk.com/ 2.2.创建群聊和钉钉机器人: 1.创建群聊,把需要收到报警的人员都拉到这个群: ...
- POJ 1039 直线和线段相交
题意: 题意很好理解,从左边射过来的光线,最远能经过管道到右边多少距离. 分析: 光线一定经过一个上端点和一个下端点,这一点很容易想到.然后枚举上下端点即可 #include <iostream ...
- Unknown custom element: <...> - did you register the component correct?
之前用过的组件没有出现过任何问题,但偏偏在其他目录下引用就出问题了.组件的名称.import的路径都没任何问题,发现这是因为组件name填写不规范所导致的. 在定义组件的时候我们要严格按照官方文档要求 ...
- 深入理解 SynchronizationContext
深入理解 SynchronizationContext 目录 深入理解 SynchronizationContext SynchronizationContext(后续以SC简称) 是什么? 1.1 ...
- SpringBoot:WebSocket使用Service层的方法
方法一: 创建工具类 ApplicationContextRegister.java import org.springframework.beans.BeansException; import o ...