手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >javascript arguments 传递给函数的隐含参数
javascript arguments 传递给函数的隐含参数
摘要:本人第一次看到这个东东的时候,以为就是“变相”的普通参数,只不过不用在定义函数的时候明确声明而已。不过,代码是廉价的(Codeischeap...

本人第一次看到这个东东的时候,以为就是“变相”的普通参数,只不过不用在定义函数的时候明确声明而已。

不过,代码是廉价的(Code is cheap.)看代码:

function funcTest(a, b) {

alert(a);

alert(b);

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

alert(arguments[i]);

}

}

function test() {

funcTest( 1 , 2 , 3 ); // 放到html页进行执行

}

function funcTest(a, b) {

alert(a);

alert(b);

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

alert(arguments[i]);

}

}

function test() {

funcTest( 1 , 2 , 3 ); // 放到html页进行执行

}

代码运行后怎么样,不错,这里的length实在是很奇怪,对不对?我们来看书中是怎么说的,“代码运行时会依次显示:1,2,1,2,3。因此,在定义函数的时候,即使不指定参数列表,仍然可以通过arguments引用到所获得的参数,这给编程带来了很大的灵活性”。没有比这句更加精辟的阐释了。

看到这里,我们可能都有一个疑问(如果你稍微具备一点js编程知识的话),arguments参数是不是js数组对象的一个实例?下面的代码会帮你解决这个疑点:

Array.prototype.testArg = " test arguments " ;

function funcArg() {

alert(arguments.testArg);

}

function test() {

alert( new Array().testArg);

funcArg();

}

Array.prototype.testArg = " test arguments " ;

function funcArg() {

alert(arguments.testArg);

}

function test() {

alert( new Array().testArg);

funcArg();

}

代码运行结果是先弹出"test arguments"和"undefined",为什么funcArg调用返回“undefined”?看到这里相信你对上面的疑问已经消除。

到这里你以为你掌握了arguments的全部?那就太小瞧js的天才设计者(们)了,下面看另外一个有才的设计:

Q:使用递归来计算1 到n 的自然数之和

A1:

function sum(n) {

if ( 1 == n) return 1 ;

else return n + sum(n - 1 );

}

function test() {

alert(sum( 100 )); ; // 放到html页进行执行

} function sum(n) {

if ( 1 == n) return 1 ;

else return n + sum(n - 1 );

}

function test() {

alert(sum( 100 )); ; // 放到html页进行执行

}

A2:

function sum(n) {

if ( 1 == n) return 1 ;

else return n + arguments.callee(n - 1 );

}

function test() {

alert(sum( 100 )); ; // 放到html页进行执行

} function sum(n) {

if ( 1 == n) return 1 ;

else return n + arguments.callee(n - 1 );

}

function test() {

alert(sum( 100 )); ; // 放到html页进行执行

}

A1和A2这两个回答都解决了问题,相信第一种方法是大多数人的常规做法,但是js推荐使用第二种,原书说A1这种方式“其中函数内部包含了对 sum 自身的调用,然而对于JavaScript 来说,函数名仅仅是一个变量名,在函数内部调用sum 即相当于调用一个全局变量,不能很好的体现出是调用自身”,sum都调用sum了,还说“不能很好的体现出是调用自身”,为什么呢?

书到用时方恨少,查书,书上是这么写的:“arguments 对象的另一个属性是callee,它表示对函数对象本身的引用,这有利于实现无名函数的递归或者保证函数的封装性,”这话我承认说的有理,我从来都对书本尤其是技术类的书本保持高度的信任,可是这里说“arguments 对象的另一个属性是callee”,这里“arguments ”怎么成“对象”了?标题都说“传递给函数的隐含参数:arguments ”,难道抄书抄错了?查看电子书,靠,复制粘贴还会有错?

对象,对象?对象何其多,下篇找"对象"。

【javascript arguments 传递给函数的隐含参数】相关文章:

javascript中attachEvent用法

javascript实现树形菜单的方法

浅析javascript函数表达式

javascript函数特点实例

javascript验证邮件地址和MX记录的方法

javascript基础知识分享之类与函数化

javascript用函数实现对象的方法

javascript清空table表格的方法

javascript带回调函数的异步脚本载入方法实例分析

javascript实现table表格隔行变色的方法

精品推荐
分类导航