在JavaScript中,函数是最核心的。
1. 在JS中,语法如下:
function myfFunction(param1,param2,parma3,……){
//do something
}
2. 调用:通过函数名调用
已有简单的一个函数
function sum(num1,num2){
return num1+num2;
}
调用sum(3,4)
,结果7。
函数中可以带有return语句,也可以没有。当有return语句,可有多个,也可以直接return ;
,没有返回值,这种情况用在提前停止函数执行而又不需要单回执的情况下。
return会直接返回,永远不会执行后面的语句,所以要慎用return语句。
3. 函数参数:按值传递
JS中的参数与其他语言的参数不同,JS不在乎你传进来几个参数或是你是否传递参数。
原因是在js的参数在内部使用一个数组来表示的,函数始终接收到的都是这个数组,数组有参数,OK,没参数也行。
在函数体内,可以使用arguments对象来访问参数数组(下标从0开始),从来获取参数列表。
function sum(){
return (arguments[0]+arguments[1];
}
通过arguments对象的length属性可以获得参数列表长度。用法arguments.length
。
另外,命名参数可以和arguments对象一起使用。
关于arguments的行为,它的值永远与对应命名擦桉树的值保持同步,例如:
funtion doAdd(num1,num2){
arguments[1] = 10;
console.log(arguments[0]+num2);
}
调用函数doAdd(10,20);
结果为20,而不是30。每次调用时都用重写num2的值,赋值为10.如果传入的参数只有一个,那么arguments[1]的值将为undefined,arguments的长度是由传递的参数的个数决定的。
4. 没有函数重载
我们知道在Java,C++等语言中,函数的重载是一个重要的功能,可以为一个函数编写两个定义,只要这两个定义函数签名不同即可。由于JS中函数没有签名,因为其参数是由包含0或多个值的数组 表示的。没有函数签名,就不是真正的函数重载。
在JS中,若是定义两个名字相同的函数,以最后一个为准。
总结:
- JS中无需指定函数的返回值,因为其可以在任何时候返回任何值
- 未指定返回值的函数返回的是一个特殊的undefined值
- JS中没有函数签名的概念,即没有真正的函数重载
- 可以向函数传递任意个数的参数,可以通过arguments对象获取参数列表,利用这一特性,可以模拟函数重载。
欢迎大家一起讨论,进步!!!