👨🎓作者简介:一位喜欢写作,计科专业大二菜鸟
🏡个人主页:starry陆离
🕒首发日期:2022年6月16日星期四
🌌上期文章:『JavaScript』数组的使用与常用方法
📚订阅专栏:『JavaWeb基础入门』
如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦
『JavaScript』JavaScript函数的定义与基本使用
1.用函数语句定义
先给一个例子,该函数的功能是返回数组元素的和;
functionsumArray(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
下面的语句不再运行。返回值即函数的输出。
用这种方式定义的函数,在函数定义的前面和后面都可以调用该函数,只要函数和调用函数的语句在一个源文件里面就可以了。
2.用表达式定义
用表达式的方式定义函数,就是用赋值表达式把函数赋值给一个变量,这其实就是把函数看成一个变量。这个时候函数可以有名字,也可以没有名字,没有名字的函数叫做匿名函数。
- 带名字的;
varfunct=functiongetMax(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
之后直接是参数列表:
varfunct=function(a,b){return a>b?a:b;};
这个函数没有名字,它被赋值给了变量
funct
,所以叫匿名函数。同样,也只能在这一语句之后调用该函数。
varfunct=function(a,b){return a>b?a:b;};
console.log(funct(1,2));//输出2
总结:用表达式定义函数是即拿即用的,定义了就只能在这一语句之后调用该函数
3.函数的调用
在实训四中,我们曾经介绍过对象可以有自己的方法,当然这也是函数。这种函数的调用和前面两关定义的函数有细小的区别。
//函数的定义:求三个数的最大值
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
与上面的区别是,这里要定位到函数,需要使用
对象名.函数名
或者
对象名["函数名"]
,其它相同。
4.未定义的实参
在大部分的编程语言里面,都会对调用函数时传入的实参个数和类型进行检查,而
JavaScript
既不检查实参的类型,也不检查实参的个数。
JavaScript
中的实参会按照顺序从左到右依次匹配上形参,例如:
functionmyFunction(a,b,c){
console.log(a);
console.log(b);
console.log(c);}myFunction(1,2,3);
实参
1
传入形参
a
,实参
2
传入形参
b
,实参
3
传入形参
c
。 当实参个数少于形参时,靠右的形参会被传入值
undefined
。如:
functionmyFunction(a,b,c){
console.log(a);
console.log(b);
console.log(c);}myFunction(1,2);
实参
1
传入形参
a
,实参
2
传入形参
b
,
undefined
传入形参
c
。 如果只想给右侧的参数传入数据,可以给前几个实参传入
undefined
。如:
functionmyFunction(a,b,c){
console.log(a);
console.log(b);
console.log(c);}myFunction(undefined,1,2);
上面这两种做法不够严谨,最佳实践是给可能被传入
undefined
值的形参设定一个默认值。如:
functiongetSum(a,b,c){if(c ===undefined)
c =0;
console.log(a+b+c);}myFunction(1,2);
5.实参对象
JavaScript
一切都是对象,实参也是一个对象,有一个专门的名字
arguments
,这个对象可以看成一个数组(类数组,不是真的数组),实参从左到右分别是
arguments[0]、arguments[1]...
,
arguments.length
表示实参的个数。
//求参数的和 functiongetSum(){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]
表示。
6.对象作为参数
复杂的函数通常多达十几个参数,尽管
JavaScript
不做参数个数和类型的检查,但是调用时实参的顺序不能乱。开发人员需要检查每一个实参和形参的对应关系,这样效率很低。一种很好的解决方案是使用对象作为参数,函数会根据对象的属性名操作参数。
functionmyFunction(obj){
console.log(obj.name);
obj.number++;return obj.number;}
myObj ={name:"myObj",number:34};myFunction(myObj);//输出myObj
console.log(myObj.number);//输出35
7.函数对象作为另一个函数的参数
一个函数(为方便行文,称为
a
函数)可以作为另外一个函数(称为
b
函数)的参数,
b
函数最终可以返回一个具体的值。
从原理上来说,
b
函数在自己的函数体内调用了
a
函数,所以需要把
a
函数的名字作为实际参数传递给
b
函数。如下:
//求最大值 functiongetMax(a,b){return a>b?a:b;}//求最小值 functiongetMin(a,b){return a<b?a:b;}//下面这个函数以函数作为参数,并最终返回一个值 functiongetM(func,num1,num2){returnfunc(num1,num2);}getM(getMax,1,2);//返回2 getM(getMin,1,2);//返回1
我们把
a
函数的名字(
getMax
或者
getMin
)传给
b
函数(
getM()
),然后在
b
函数内部调用传入的
a
函数,得到相关的结果。
版权归原作者 starry陆离 所有, 如有侵权,请联系我们删除。