- 无须指定函数的返回值,因为JavaScript 函数可以在任何时候返回任何值。
- 实际上,未指定返回值的函数返回的是一个特殊的undefinded 值。
- 可以向JavaScript 函数传递任意数量的参数,因为其函数参数是以一个包含零或多个值的数组的形式传递的,并且可以通过arguments 对象来访问这些参数。
- JavaScript 函数不能重载。
JavaScript 函数实际上是Function 类型的实例, 因此函数也是对象,而这一点正是JavaScript最有特色的地方,由于函数是对象,所以函数也拥有方法,可以用来增强其行为。
函数定义
JavaScript 函数使用function 关键字来声明,后跟一组参数及函数体:
function functionName(arg0, arg1, ... , argN){
statements
}
JavaScript 函数在定义时不必指定是否返回值,实际上,任何函数在任何时候都可以通过return 语句后跟要返回的值来实现返回值,如
function sum(num1, num2){
return num1 + num2;
}
var result = sum(6, 8);
函数会在执行完return 语句之后停止并立即退出,因此,位于return 语句之后的任何代码都永远不会执行
function sum(num1, num2){
return num1 + num2;
alert("Hello world!"); // 永远不会执行
}
一个函数中也可以包含多个return 语句
function diff(num1, num2){
if(num1 < num2){
return num2 - num1;
}else{
return num1 - num2;
}
}
别外,return 语句也可以不带有任何返回值,在这种情况下,函数在停止执行后将返回undefinded 值。这种用法一般用在需要提前停止函数而又不需要返回值的情况下
function sayHi(name, message){
return;
alert("Hi " + name + "," + message); //永远不会执行
}
函数参数
JavaScript 函数的参数与大多数其他语言中的参数有所不同,JavaScript 函数的参数不介意传递进来多少个参数,也不在乎传进来的参数是什么类型,即使你在定义函数的时候只接收两个参数,但在调用这个函数的时候也未必一定要传递两个参数,可以传一个、三个、甚至不传,之所以会这样,是因为JavaScript 的参数在内部是用一个数组表示的,函数接收到的始终都是这个数组,而不关心数组中包含哪些参数。实际上, 在函数体内可以通过arguments 对象来访问这个参数数组,从而获取传递给函数的每一个参数。
对过arguments 对象可以使用方括号语法访问它的每一个元素,即第一个元素是arguments[0], 第二个元素是arguments[1],以此类推,使用length 属性可以获得传递进来参数的个数。
例如可以利用这一点让函数可以接收任意个参数并分别实现适当的功能
function doAdd(){
if(arguments.length == 1){
return arguments[0] + 10;
}else if(arguments.length == 2){
return arguments[0] + arguments[1];
}
}
doAdd(10); //20
doAdd(10, 20); //30
没有重载
JavaScript 函数不能像传统意义上那样实现重载,而在其他语言如JAVA中,可以为一个函数编写两个定义,只要这两个定义的参数和数量不同即可,但JavaScript 函数的参数是由包含零个或多个值的数组来表示的,所以是无法实现重载的。
如果在JavaScript 中定义两个名字相同的函数,则该名字只属于后定义的函数,因为后定义的函数覆盖了先定义的函数。
function addNum(num){
return num + 100;
}
function addNum(num){
return num + 200;
}
var result = addNum(100); //300
通过检查传入函数中参数的类型和数量并作出不同的反应,可以模仿方法的重载。