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
  • 相关阅读:
    [转]使用RDLC报表
    WPF 导出Excel 导出图片
    细说WPF自定义路由事件
    [转]WPF更换主题
    推荐5款超实用的.NET性能分析工具
    Hibernate框架
    C#的protected internal
    C#的类修饰符和成员修饰符
    C#的foreach
    C#接口
  • 原文地址:https://www.cnblogs.com/linxd/p/4479381.html
Copyright © 2011-2022 走看看