javascript函数function学习【javascript高级程序设计】

时间:2022-04-21 02:59:59

function语法:

/*

ECMAScript 使用function关键字来声明,后跟一组参数及函数体。基本语法如下:
function functionName(arg0,arg1,arg2,...argN){
statements
}

*/

/*
function sayHi(name,message){
alert("Hello "+name+","+message);
}
//通过函数名传参调用
sayHi("tom","how are you today?");//result:Hello tom,how are you today?
*/

/*
function sum(num1,num2){
return num1+num2;
}
var result = sum(5,10);
alert(result);
*/


/*
function sum(num1,num2){
return num1+num2;
alert(num1+num2);//永远不会执行
}
*/

/*
function diff(num1,num2){
if(num1>num2){
return num1-num2;
}else{
return num2-num1;
}
}
var result = diff(5,9);
alert(result);
*/


/*return语句也可以不带任何返回值。这种情况下,函数在停止执行后将返回undefined值。
这种用法一般用在需要提前停止函数执行而又不需要返回值的情况下。
*/
//比如下面这个例子中,就不会显示警示框。

/*
function sayHi(name,message){
return;
alert("Hello "+name+","+message);
}
*/
//推荐的做法是要么让函数始终都返回一个值,要么永远都不要返回值。否则,如果函数有时候返回值,有时候不返回值,会给调试代码带来不便。


对function参数的理解:

/*
对function参数的理解:
ECMAScript函数的参数与大多数其他语言中函数参数有所不同。ECMAScript函数不介意传递进来多少个参数,也不介意传进来参数是什么数据类型。
也就是说,即便你定义的函数只接受两个参数,在调用这个函数时也未必一定要传递两个参数。可以传递一个、三个甚至不传递参数,而解析器永远不会有什么怨言。
原因:
之所以会这样,原因是ECMAScript中的参数在内部是用一个数组来表示的。函数接受的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)。
如果这个数组中不包含任何元素,无所谓;如果多包涵多个元素,也没有问题。
实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
其实,arguments对象只是与数组函数类似(他并不是Array的实例),因为可以使用方括号语法访问它的
每一个元素(arguments[0]、arguments[1]、... ... arguments[n]),使用length属性来确定传递进来多少个参数。
*/

//因此可以对上面的sayHi()函数进行重写:
/*
function sayHi(){
alert("Hello "+arguments[0]+","+arguments[1]);
}
sayHi("tom","how are you today?");
*/

/*
function howManyArgs(){
alert(arguments.length);
}
howManyArgs("string",45);//2
howManyArgs();//0
howManyArgs(14);//1
*/

/*
function doAdd(){
if(arguments.length==1){
alert(arguments[0]+10);
}else if(arguments.length==2){
alert(arguments[0]+arguments[1]);
}
}
doAdd(10);
doAdd(20,30);
*/


//另一个与参数相关的重要方面,就是arguments对象可以与命名参数一起使用,如下面例子所示:

/*
function doAdd(num1,num2){
if(arguments.length==1)
{
alert(num1+10);
}
else if(arguments.length==2)
{
alert(arguments[0]+num2);
}
}
doAdd(10);//20
doAdd(30,20);//50
*/


//ECMAScript没有重载,如果定义两个名字相同的函数,则改名字是属于后定义的函数。请看示例:

function addSomeNumber(num){
return num+100;
}

function addSomeNumber(num){
return num+200;
}
var result=addSomeNumber(100);//300
alert(result);