函数
function sayHi (name, message) {
alert("Hello " + name + "," + message);
}
- 用
function关键字来声明 - 返回值:
- 定义时,不必指定是否返回值
- 任何函数在任何时候都可以通过
return语句来实现返回值 - 可以包含多个
return语句 return后面可以不跟任何值,这时返回undefined值。用于需要提前停止函数执行又不需要返回值的情况下。- 函数中
return之后的代码不会执行 - **推荐:要么函数始终返回一个值,要么永远都不返回值。**否则会给调试带来不便。
- 严格模式下的命名限制:
- 不能把函数或参数,命名为
eval或arguments - 参数不能同名
- 不能把函数或参数,命名为
参数
- 不介意传递多少个参数
- 例如,定义接收2个,但实际传了3个,解释器也没问题
- 不介意传进来的参数是什么数据类型
参数,在内部,是用一个数组来存放和传递的
给参数命名,只是提供便利,但不是必须的
- 函数体内,可以用
arguments对象,访问这个参数数组arguments对象只是与数组类似,其实并不是Array实例- 使用
[]来访问它的元素 - 使用
length属性来确定传递进来多少个参数- 是由实际传入的参数个数决定
- 而不是由定义的命名参数个数决定
arguments对象可以和命名参数一起使用- 即可以互换使用
function doAdd(num1)里arguments[0]和命名参数num1可以互换使用- arguments的值永远宇对应的命名参数的值保持同步
- 没有传递值的命名参数,被自动赋予undefined值
function doAdd (num1, num2) {
//num2的值和arguments[1]的值,保持同步,也会变为10
//但二者的内存空间是独立的
//严格模式下,不允许重写arguments的值
arguments[1] = 10;
alert(arguments[0] + num2);
//如果实际只传入一个参数,num2不会变为10,即arguments[1]的值不会同步反映到num2中
}
- 可以让函数接收任意个参数,分别实现功能,像重载那样,如下:
function doAdd() {
if (arguments.length == 1) {
alert(arguments[0] + 10);
} else if (arguments.length == 2) {
alert(arguments[0] + arguments[1]);
}
}
//有点儿重载那意思了
doAdd(10); // 20
doAdd(30, 20); //50
没有重载
- ECMAScript的函数没有签名,真正的重载是不可能做到的
- 如果定义了两个同名的函数,则该名字只属于后定义的函数
- 通过检查输入函数中参数的类型和数量,可以模仿重载