arguments.callee() 基本使用

 用法:

arguments.callee():用于获取当前正在执行的函数的引用的特殊属性。可以用于递归调用匿名函数或动态获取函数的引用

具体使用方式和用法如下:

  1. 递归调用匿名函数:
(function() {
  console.log("Hello");
  arguments.callee(); // 通过 arguments.callee() 调用自身
})();

 解析:这段代码定义了一个匿名函数,并在函数内部通过 arguments.callee() 调用自身,从而实现递归调用。注意,在严格模式("use strict")下,访问 arguments.callee 会抛出错误。

  2. 获取函数引用:

function foo() {
  console.log("Function foo");
}

var func = arguments.callee; // 获取函数 foo 的引用
func(); // 调用函数 foo

解析:这段代码中,通过将 arguments.callee 赋值给变量 func,实现了获取函数 foo 的引用。然后可以通过 func() 调用函数

 3. 其他用法

<script>
        //arguments.callee()多用于递归调用  指向函数自身引用
        //防止函数执行与函数名紧紧耦合的现象
        function fac(n) {
            if (n <= 1) {
                return 1;
            } else {
                return n * fac(n - 1);
            }
        }
        console.log(fac(5));
        console.log('----------');

        function fac(n) {
            if (n <= 1) {
                return 1;
            } else {
                return n * arguments.callee(n - 1);
            }
        }
        console.log(fac(5));
        console.log('--------');
        var num = (function fac(n) {
            if (n <= 1) {
                return 1;
            } else {
                return n * arguments.callee(n - 1);
            }
        }(5));
        console.log(num);
</script>

 注意点:

arguments.callee 在严格模式下已被废弃,不能使用。因此,为了保持代码的可维护性和兼容性,推荐使用具名函数而不是匿名函数,并直接使用函数名来递归调用或获取函数引用。

具名函数:

具名函数是指在定义函数时给函数一个名称的函数。与匿名函数相比,具名函数有一个明确的标识符,可以通过该标识符来调用函数或者引用函数。

以下是具名函数的示例:

  1. 基本的具名函数:
function add(a, b) {
  return a + b;
}

console.log(add(2, 3)); // 输出: 5

这里的 add 就是一个具名函数,通过函数名 add 可以直接调用函数。

   2. 具名函数表达式:

var multiply = function multiply(a, b) {
  return a * b;
};

console.log(multiply(2, 3)); // 输出: 6

在这个例子中,我们使用了一个具名函数表达式,将一个函数赋值给变量 multiply。虽然该函数是一个表达式,但它仍然具有一个名称 multiply,可以通过该名称来调用函数。

需要注意的是,在具名函数表达式中,函数名 multiply 在函数内部是可见的,但在外部是不可见的。

具名函数的优点是在调试和错误追踪时更方便,因为具名函数在堆栈跟踪中会显示函数的名称,而匿名函数则不会。此外,具名函数还可以在函数内部进行递归调用,而匿名函数无法直接进行递归调用(需要使用 arguments.callee)。

总结:具名函数是在定义函数时给函数一个名称的函数。它们可以通过函数名来调用函数或引用函数,并且在堆栈跟踪中能够显示函数的名称。

总结:

arguments.callee() 是一个特殊的属性,用于获取当前正在执行的函数的引用。它可以用于递归调用匿名函数或动态获取函数的引用。然而,在严格模式下已被废弃,不推荐使用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白小白从不日白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值