javascript - js匿名函数的问题
PHP中文网
PHP中文网 2017-04-11 09:49:38
[JavaScript讨论组]
        <script>        
            var f=(function(num){
                if(num<=1){
                    return 1;
                }else{
                    return num*arguments.callee(num-1);
                }
            });
             console.log(f);            
        </script>

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

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(7)
ringa_lee

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

ringa_lee

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

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

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

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

ringa_lee

现在函数的名字就是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的阶乘啊..

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号