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会是 个比较好的方法。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。