犀牛——第8章函数 8.3 函数的实参和形参

来源:互联网 发布:手机淘宝到货退款流程 编辑:程序博客网 时间:2024/05/18 03:23

8.3 函数的实参和形参

8.3.1 可选形参

例子:

//将对象o中可枚举的属性名追加至数组中,并返回这个数组a

//如果省略a,则创建一个新数组并返回这个新数组

function getPropertyNames(o,/*optional*/a){

if(a === undefined) a = [];//如果未定义,则使用新数组

for(var property in o) a.push(property);

return a;

}


//这个函数调用可以传入1个或2个实参

var a = getPropertyNames(o);  //将o的属性存储到一个新数组中

getPropertyNames(p,a);           //将p的属性追加至数组a中


*如果第一行代码中不使用if语句,可以使用“||”运算符:a = a || [];

*注意在函数定义中使用注释/*optional*/来强调形参是可选的。


8.3.2 可变长的实参列表:实参对象

在函数体内,标识符arguments是指向实参对象的引用,实参对象是一个类数组对象。

实参对象有一个重要的用处,就是让函数可以操作任意数量的实参。

function max(/*...*/){

var max = Number.NEGATIVE_INFINITY;

//遍历实参,查找并记住最大值

for(var i = 0; i < arguments.length; i++)

if(arguments[i] > max) max = arguments[i];

//返回最大值

return max;

}


var largest = max(1,10,100,2);  //=>10000


arguments并不是真正的数组,它是一个实参对象。每个实参对象都包含以数字为索引的一组元素以及length属性,但它毕竟不是真正的数组。


8.3.3 将对象属性用做实参

通过名/值对的形式来传入参数,参数的顺序就无关紧要了。定义函数的时候,传入的实参都写入一个单独的对象之中,在调用的时候传入一个对象,对象中的名/值对是真正需要的实参数据。

8.3.4 实参类型

JavaScript方法的形参并未申明类型,在形参传入函数体之前也未做任何类型检查。给实参补充注释,对于可选的实参来说,可以在注释中补充一个“这个参数是可选的”。当一个方法可以接收任意数量的实参时,可以使用省略号:function max(/*number...*/){/*代码区*/}











0 0