首页 > 代码库 > JS之arguments属性解读函数传参?

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

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

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

[function.]arguments[n]

参数说明:

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

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

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

    <script>var result =function(){   alert(arguments.length);  //返回2
  alert(argument[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是形参长度,由此能够判断调用时形参长度是否和实参长度一致。

递归计算:递归计算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会是 个比较好的方法。

 

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