首页 新闻 会员 周边

请问js中带参函数作为另一函数的参数传递时,应该怎么写?

0
悬赏园豆:10 [已解决问题] 解决于 2015-09-05 10:50

我尝试的demo如下:

<script type="text/javascript">
        function execMethod()
        {
            $.each(arguments, function (i, n) {
                n();
            });
        }

        function a()
        {
            alert('a');
        }

        function b() {
            alert('b');
        }

        function n(x) {
            alert(x);
        }

        function e()
        {
            execMethod(a, b, n(7));
        }
    </script>

在上边的代码中,不带参数的函数a,b能正常运行.

而带参的函数n,传参数 execMethod(a,b,n(7))时直接被立即调用,

我的理解应该是加了()的函数就立即调用了.

而each中,a,b是能得到方法体的,所以能正常执行.

而n(7)却提示函数未定义,的确没有声明 function n(7)(){....}这样的函数.

那么..如果想将带参数的函数传递进去,被动态调用,应该如何写呢?

谢谢指导.

hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2015-09-01 09:48
< >
分享
最佳答案
0
function execMethod()
{
    $.each(arguments, function (i, n) {
        n.fn.call(this, n.args);
    });
}

function a()
{
    alert('a');
}

function b() {
    alert('b');
}

function n(x) {
    alert(x);
}

function e()
{
    execMethod({fn: a}, {fn: b}, {fn: n, args: 7});
}

e();
收获园豆:9
幻天芒 | 高人七级 |园豆:37175 | 2015-09-01 10:44
其他回答(2)
0

不能写在传入参数那个地方,这样的话js会首先把n执行了再释放了,随后再进入execMethod找到n的时候,n就是undefined。不知道这样lz可以接受不:

!function () {
function execMethod() {
$.each(arguments, function (i, n) {

if (i === 2) {
n(7);
}
else {
n();
}
});
}

function a() {
alert('a');
}

function b() {
alert('b');
}

function n(x) {
alert(x);
}

function e() {
execMethod(a, b, n);
}

e();
}();

伤心懒睡猪 | 园豆:346 (菜鸟二级) | 2015-09-01 10:12

<script type="text/javascript">
!function () {
function execMethod(a,b,n,f) {
$.each(arguments, function (i, n) {

n(f);

});
}

function a() {
alert('a');
}

function b() {
alert('b');
}

function n(x) {
alert(x);
}

function e() {
var f = 7;
execMethod(a, b, n, f);
}

e();
}();
</script>

后面想了下,这样写更好些

支持(0) 反对(0) 伤心懒睡猪 | 园豆:346 (菜鸟二级) | 2015-09-01 10:23
0
function e()
{
    execMethod(a, b, function(){
        n(7);
    });
}

改成这样应该就可以了

收获园豆:1
I,Robot | 园豆:9783 (大侠五级) | 2015-09-01 10:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册