您的位置:首页 > Web前端 > JavaScript

JS之arguments属性解读函数传参?

2014-11-05 14:34 316 查看
Arguments
  该对象代表正在执行的函数和调用他的函数的参数。

  arguments属性:为当前执行中的Function对象返回arguments对象和参数。

[function.]arguments

参数说明:

  参数function:选项。当前正在执行的Function对象的名字。

  n:表示传递过来的参数下标索引

1.对于参数对象
  说明:Arguments是进行函数调用时,除了指定的参数外,还另外创建的一个隐藏对象。

<script>
varresult=function(){
alert(arguments.length);//返回2
  alert(arguments[0]);//返回123
};
result(123,'nihjao');
</script>
可知:在没有定义形式参数变量的情况下爱,也传过来了参数,并被arguments接受。所以arguments是一个隐藏对象


在函数中定义形参接受参数

varresult=function(y){
alert(y);
alert(result.arguments[0]);  //返回123
alert(arguments[1]);      //返回nihao
alert(arguments.length);    //返回2arguments.length是指实参长度
alert(arguments.callee.length);  //返回1arguments.callee.length是形参长度

};

result(123,'nihjao');
</script>
此时:函数定义了一个形参y接受传过来的参数,只接受第一个


2.callee属性返回正在执行的函数对象

  返回正在执行的function对象,也就是所指定的Function对象的正文。

functioncalleeDemo(){
alert(arguments.callee);
}

callee能够打印函数其本身



  callee属性是arguments对象的一个成员,他表示对函数对象本身的引用,这有利于匿名函数的递归或确保函数的封装性,该属性只在函数正在执行时可用

注意:callee拥有length属性,arguments.length是实参度,arguments.callee.length是形参长度,由此能够判断调用时形参长度是否和实参长度一致。

<scripttype="text/javascript">
(function(o){
alert(o);
returnarguments.callee;
})('water')('down');

</script>

递归执行函数

递归计算:递归计算1到n的自然数之和?  

varsum=function(n){
if(n<=0)return1;
elsereturnn+arguments.callee(n-1)
}
比较一般的递归函数:
varsum=function(n){
if(1==n)return1;
elsereturnn+sum(n-1);
}
调用时:sum(100);


其中函数内部包含了对sum自身的引用,函数名仅仅是个变量名,在函数内部调用sum即相当于调用一个全局变量,不能很好的体现出是调用自身,这时使用callee会是个比较好的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: