// 首先看一看这个,看看5是怎样迭代进去的。
// 先看看这个
var a = function(f){
    return f(f);
}(function(c){
    return c;
});
// 其实这种写法,是定义返回值成为一个函数的写法,等价于
function a(f){
    return f;
}
function f(c){
    return c;
}
// 或
var a = function(f){
    return f;
    // 其实已变成return function(f)了,f的值就代进c了
}
var f = function(c){
    return c;
}
或 var a = function(f){
    return function(f){
        return f;
    };
    // 这里应该看得比较清楚了吧。
}
// 我们调用下面看看
alert(a(0));

解决方案 »

  1.   

    或 var a = function(f){
        return function(f){
            return f;
        };
        // 这里应该看得比较清楚了吧。
    }上面那部份是错了,去掉,不好意思~~
      

  2.   

    <script language="JavaScript">
    <!--
    var le = function(factorial){
        return function(n){
            return n<=2?n:n*factorial(n-1);
        };
    };
    var factorial = function(x){
        return f(f)(x);
    };
    var f = function(f){
        return le(factorial);
    };
    alert(f(5)(5));
    //-->
    </script>
      

  3.   

    <script language="JavaScript">
    <!--
    var le = function(factorial){
    return function(n){
    return n<=2?n:n*factorial(n-1);
    };
    };
    var factorial = function(x){
    return f(f)(x);
    };
    var f = function(f){
    return le(factorial);
    };
    var factorial = f(factorial);
    alert(factorial(5));
    //-->
    </script>