JS函数的定义方式有几种,用法是怎样的
Admin 2022-08-23 群英技术资讯 279 次浏览
先给一个例子,该函数的功能是返回数组元素的和;
function sumArray(arr) { var sum = 0; for(var i = 0,aLength = arr.length;i < aLength;i++) { sum += arr[i]; } return sum; }
关键字function
后面空一格,sumArray
是函数的名字,其命名规范与变量名的命名规范相同:只能有字母、数字、下划线和美元符号,不能以数字开头,不能是关键字。
括号中是参数,又叫形式参数,只需要参数名就可以。参数可以是0
个、1
个或者多个,相互之间用,
隔开,{}
中间包含的是函数体。含有一条或者多条语句。函数体用来实现函数的功能。
关键字return
后面是函数的返回值,函数也可以没有返回值。函数运行完return
这句话这里就会退出运行,return
下面的语句不再运行。返回值即函数的输出。
用这种方式定义的函数,在函数定义的前面和后面都可以调用该函数,只要函数和调用函数的语句在一个源文件里面就可以了。
用表达式的方式定义函数,就是用赋值表达式把函数赋值给一个变量,这其实就是把函数看成一个变量。这个时候函数可以有名字,也可以没有名字,没有名字的函数叫做匿名函数。
var funct = function getMax(a,b) { return a>b?a:b; };//注意这后面的分号不能少,因为我们定义的是一个变量!
和用函数语句定义不同的是,只能在函数定义语句之后调用该函数,且调用的时候只能用变量名funct
,不能用函数名getMax
,如:
var funct = function getMax(a,b) { return a>b?a:b; }; console.log(funct(1,2));//输出2
function
之后直接是参数列表:var funct = function(a,b) { return a>b?a:b; };
这个函数没有名字,它被赋值给了变量funct
,所以叫匿名函数。同样,也只能在这一语句之后调用该函数。
var funct = function(a,b) { return a>b?a:b; }; console.log(funct(1,2));//输出2
总结:用表达式定义函数是即拿即用的,定义了就只能在这一语句之后调用该函数
在实训四中,我们曾经介绍过对象可以有自己的方法,当然这也是函数。这种函数的调用和前面两关定义的函数有细小的区别。
//函数的定义:求三个数的最大值 function max(a,b,c) { if(a > b) { if(a > c) return a; else return c; } else { if(b > c) return b; else return c; } } //调用该函数 var result = max(1,2,3);//result为3 console.log(result);//输出3
调用函数的时候,需要传入和形参相同个数的的具体值,上面的函数有3
个参数,所以下面调用的时候传入3
个具体的值,1
传给参数a
,2
传给参数b
,3
传给参数c
。函数的返回值通过赋值符号=
传给了变量result
。如果函数体内没有return
关键字,将返回undefined
。
对象里定义的函数的调用:
var ob = { id:1, getMax:function(a,b) { return a>b?a:b; } }; var result = ob.getMax(2,1);//result值为2 var result1 = ob["getMax"](2,1);//result1的值也是2
与上面的区别是,这里要定位到函数,需要使用对象名.函数名
或者对象名["函数名"]
,其它相同。
在大部分的编程语言里面,都会对调用函数时传入的实参个数和类型进行检查,而JavaScript
既不检查实参的类型,也不检查实参的个数。JavaScript
中的实参会按照顺序从左到右依次匹配上形参,例如:
function myFunction(a,b,c) { console.log(a); console.log(b); console.log(c); } myFunction(1,2,3);
实参1
传入形参a
,实参2
传入形参b
,实参3
传入形参c
。 当实参个数少于形参时,靠右的形参会被传入值undefined
。如:
function myFunction(a,b,c) { console.log(a); console.log(b); console.log(c); } myFunction(1,2);
实参1
传入形参a
,实参2
传入形参b
,undefined
传入形参c
。 如果只想给右侧的参数传入数据,可以给前几个实参传入undefined
。如:
function myFunction(a,b,c){ console.log(a); console.log(b); console.log(c); } myFunction(undefined,1,2);
上面这两种做法不够严谨,最佳实践是给可能被传入undefined
值的形参设定一个默认值。如:
function getSum(a,b,c) { if(c === undefined) c = 0; console.log(a+b+c); } myFunction(1,2);
JavaScript
一切都是对象,实参也是一个对象,有一个专门的名字arguments
,这个对象可以看成一个数组(类数组,不是真的数组),实参从左到右分别是arguments[0]、arguments[1]...
,arguments.length
表示实参的个数。
//求参数的和 function getSum() { var aLength = arguments.length; var sum = 0; for(var i = 0;i < aLength;i++) { sum += arguments[i]; } return sum; } console.log(getSum(1,2,3,4,5))//输出15
这里的形参直接省略,使用arguments[i]
表示。
复杂的函数通常多达十几个参数,尽管JavaScript
不做参数个数和类型的检查,但是调用时实参的顺序不能乱。开发人员需要检查每一个实参和形参的对应关系,这样效率很低。一种很好的解决方案是使用对象作为参数,函数会根据对象的属性名操作参数。
function myFunction(obj) { console.log(obj.name); obj.number++; return obj.number; } myObj = {name:"myObj",number:34}; myFunction(myObj);//输出myObj console.log(myObj.number);//输出35
一个函数(为方便行文,称为a
函数)可以作为另外一个函数(称为b
函数)的参数,b
函数最终可以返回一个具体的值。
从原理上来说,b
函数在自己的函数体内调用了a
函数,所以需要把a
函数的名字作为实际参数传递给b
函数。如下:
//求最大值 function getMax(a,b) { return a>b?a:b; } //求最小值 function getMin(a,b) { return a<b?a:b; } //下面这个函数以函数作为参数,并最终返回一个值 function getM(func,num1,num2) { return func(num1,num2); } getM(getMax,1,2);//返回2 getM(getMin,1,2);//返回1
我们把a
函数的名字(getMax
或者getMin
)传给b
函数(getM()
),然后在b
函数内部调用传入的a
函数,得到相关的结果。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
JS模拟实现串行加法器,下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。
vue项目中怎样进行rem替换px的操作?rem和px都是针对字体大小的,一些朋友对于rem和px的替换比较好奇,下面小编就给大家分享rem替换px的实例,有需要的朋友借鉴参考,下面我们一起来看一看吧。
方法:1、利用“$(li元素)”语句匹配li对象;2、利用“:eq()”选择器选取指定的li节点,语法“li对象.eq(位置值)”;3、利用attr()方法为指定li节点添加属性,语法“li节点.attr(“新属性名”,“新属性值”)”。
当我点击饼图时,出现相应的内容,并重新渲染饼图展示内容 饼图点击事件this.conechart.on(click, (params) = { params.name});获取的是点击的对应的板块名 利用获取的板块名,去接口调取对应的数据 , 调取数据是异步调用 ,所以重新渲染视图要在 异步中渲染,否则同步渲染不
ofixed与round方法的定义和用法是什么,有何不同?一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解一下,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008