zoukankan      html  css  js  c++  java
  • arguments对象的callee属性详解

      在函数内部,有两个特殊的对象:arguments和this。

      argument对象有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。请看下面这个非常经典的阶乘函数。

    function factorial(num) {
        if (num <= 1) {
            return 1;
        } else {
            return num*factorial(num-1);
        }
    }

      这种写法的问题在于函数的执行和函数名factorial紧紧耦合在一起。可以像下面这样使用arguments.callee.

    function factorial(num) {
        if (num <= 1) {
            return 1;
        } else {
            return num * arguments.callee(num-1);
        }
    }

      在这个重写后的factorial()函数的函数体内,没有再引用函数名factoria。这样,无论引用函数时使用的是什么名字,都可以保证正常完成递归调用。例如:

    var trueFactorial = factorial;
    
    factorial = function() {
        return 0;
    };
    
    alert(trueFactorial(5));            // 120
    alert(factorial(5));                // 0
  • 相关阅读:
    python
    python
    gitlab
    nodejs
    java
    ElasticSearch 安装与配置 (windows)
    shell脚本批量注释
    C获取系统中CPU核数
    linux内核内存管理
    perf: interrupt took too long (3136 > 3126), lowering kernel.perf_event_max_sample_rate to 63000
  • 原文地址:https://www.cnblogs.com/linxd/p/4479381.html
Copyright © 2011-2022 走看看