js匿名函数的问题

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

这是一个匿名函数。我想问,我要给这个匿名函数传参数要怎么传?比如传10.

阅读 2.9k
7 个回答

f(10);
把等号右边最外面的()去掉也行,
加括号只是为了强制转化为函数表达式,
不过在等号右边就已经是函数表达式了,
不用在外面加一个括号。

arguments.callee!
题主应该是写错了吧。

这种用法在红宝书上推荐为用来写递归,但是在ES5 严格模式中被废弃了

这实际上是一个糟糕的解决方案,因为这 (以及其它的 arguments, callee, 和 caller 问题) 使得在通常的情况(你可以通过调试一些个别例子去实现它,但即使最好的代码是最理想的,你也没必要去检查调试它)不可能实现内联和尾递归。另外一个主要原因是递归调用会获取到一个不同的 this 值

现在都不推荐这么写了
https://developer.mozilla.org...

现在函数的名字就是f。f(参数)。
两种函数声明方式:
1.var fn = function(){};
2.function fn(){};
还有一个特殊点的var fn1 = function fn2(){};
你可以试试特殊点的fn1、fn2哪个能调用访问这个函数。

直接传参就行了,例如f(5);
另外calle是什么鬼?callee吧

<script>        
    var f=(function calc(num){
        if(num<=1){
            return 1;
        }else{
            return num*calc(num-1);
        }
    });
     console.log(f(10));            
</script>

<script>

var f=(function(num){
    if(num<=1){
        return 1;
    }else{
        return num*arguments.callee(num-1);
    }
});
console.log(f(10));

</script>

就像这样,直接传参数不就可以了

这么大的数,等于10的阶乘啊..

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题