函数
通过函数可以封装任意多条语句,可以在任何地方,任何时候调用执行。ECMAScript中的函数使用function关键字来声明,后跟一组参数和函数体。
语法:
funcation funcationName(arg0,arg1……,argN){
statements
}
function sayHi(name,message){
alert("Hello"+name+","+message);
}
这个函数可以通过其函数名来调用,后面还要加上一对圆括号和参数(圆括号中的参数如果有多个,可以用逗号隔开)。
调用sayHi()函数代码:
sayHi("Nicholas","how are you today?");
函数输出的结果是“Hello Nicholas,how are you today?”
位于return语句之后的任何代码都永远不会执行。
一个函数中也可以包含多个return语句,如下所示:
function different(num1 ,num2){
if(num1>num2){
return num1-num2;
}else{
return num2-num1;
}
}
return 语句也可以不带有任何返回值。在这种情况下,函数在停止执行后将返回undefined值。这种用法一般用在需要提前停止函数而又无需返回值的情况下。
例如:
function sayHi{
return;
alert("Hello "+name+","+message);
}
严格模式下对函数有一些规则:
- 不能把函数命名为eval或者arguments;
- 不能把参数命名为eval或者arguments;
- 不能出现两个命名参数同名的情况。
1 参数
ECMAScript中的参数在内部都是用一个数组来表示的,函数接收到的始终都是这个数组,所以不关心数组中包含哪些参数。数组中可以有参数,也可以没有参数。
ECMAScript函数不介意传递进来多少各参数,在不在乎传进来的参数是什么数据类型。实际上,在函数体内可以通过arguments对象访问这个参数数组,从而获取传递函数的每一个参数。
使用Length属性来确定传递进来多少个参数。
如下例:
function howManyArgs(){
alert(arguments.Length);
}
howManyArgs( "string ",45); //2
howManyArgs(); //0
howManyArgs(12); //1
funcation doAdd(){
if(arguments.Length=1){
alert(arguments[0]+10);
}else if{
alert(arguments[0]+arguments[1]);
}
}
doAdd(10); //20
doAdd(30,20); //50
arguments 对象可以与命名参数一起使用,关于arguments的行为,它的值永远与对应命名参数的值把持同步。
arguments对象的长度是由传入参数的个数决定的,不是由定义函数时的命名参数的个数决定的。
对于参数,没有传递值的命名参数将自动被赋予undefined值,相当于定义了变量,但是没有定义变量的值。
严格模式下不可以重写arguments的值。
1 没有重载
ECMAScript函数签名,因为某参数是由包含零或者多个值的数组来表示的。没函数签名,真正的重载是不可能做到的。
例如:ECMAScript中定义了两个名字相同的函数,则该名字只属于后定义的函数。
function addSomeNumber(num){
return num+100;
}
function addSomeNumber(num){
return num+200;
}
var result=addSomeNumber(100); //300
由于后定义的函数覆盖了先定义的函数,因此当在最后一行代码中调用这个函数时,返回的结果就是300。