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

Arguments
  该对象代表正在执行的函数 和 调用他的函数的参数。

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

[function.]arguments[n]

参数说明:

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

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

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

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

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

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

};

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

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

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

function calleeDemo() {
  alert(arguments.callee);
}
callee能够打印函数其本身
 

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

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

<script type="text/javascript">
(function(o) {
alert(o);
return arguments.callee;
})('water')('down');

</script>

递归执行函数

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

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

其中函数内部包含了对sum自身的引用,函数名仅仅是个变量名,在函数内部调用sum即相当于调用一个全局变量,不能很好的体现出是调用自身,这时使用callee会是 个比较好的方法。

 

posted @ 2014-11-05 14:34  ITCHN  阅读(511)  评论(0编辑  收藏  举报