Home >Web Front-end >JS Tutorial >js 中arguments.callee实例详解

js 中arguments.callee实例详解

WBOY
WBOYOriginal
2016-06-01 09:54:551214browse

callee :返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。
说明 : callee 属性的初始值就是正被执行的 Function 对象。

callee 属性是 arguments 对象的一个成员,它表示对函数对象本身的引用,这有利于匿名函数的递归或者保证函数的封装性,例如下边示例的递归计算1到n的自然数之和。而该属性仅当相关函数正在执行时才可用。还有需要注意的是callee拥有length属性,这个属性有时候用于验证还是比较好的。arguments.length是实参长度,arguments.callee.length是形参长度,由此可以判断调用时形参长度是否和实参长度一致。

实例一:
callee可以打印其本身。

<code><script type="text/javascript">
    function calleeDemo() {
        alert(arguments.callee);//运行结果:function calleeDemo() {alert(arguments.callee);} 
    } 
</script></code>

 
实例二:
 callee用于验证参数

<code><script type="text/javascript"> 
function calleeLengthDemo(arg1, arg2) {
     if (arguments.length==arguments.callee.length) {
         window.alert("验证形参和实参长度正确!");
         return;
     } else {
         alert("实参长度:" +arguments.length);
         alert("形参长度: " +arguments.callee.length);
     }
}
</script></code>

 
实例三:
callee递归的应用:
一般递归是这么写,但这样有一个弊端,当函数名称改变时,递归调用的函数名称也需要改变。

<code><script type="text/javascript"> 
var sum = function(n){
    if (1==n) 
        return 1;
    else 
        return n + sum (n-1);
</script></code>

 
这时,我们使用arguments.callee来改进递归的调用。如下:

<code><script type="text/javascript">  
var sum = function(n){
    if (n <= 0)                        
        return 1;
    else
        return n +arguments.callee(n - 1)
}
</script></code>

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn