JavaScript回调函数

时间:2010-12-13 15:07:00

标签: javascript

请帮忙 我这里有一个简单的例子     

<script type="text/javascript" language="javascript">
    function test(callback1) {
        callback1();
    }
    var f1 = function () {
        alert(1);
    }
</script>

目前,测试功能的参数是一个功能,当点击abc按钮时,将调用测试功能,然后测试将调用f1。一切都和我好。

但是,我想要一个像这样的小改动:测试函数的参数将是一个字符串,我的意思是它应该是一个函数名,test('f1')而不是test(f1)。 有可能吗?我该如何实现呢?

由于

4 个答案:

答案 0 :(得分:2)

这里不需要

eval()。要传递回调,只需传递函数名称即可。函数是变量。

例如:

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

function callback(b,a){
    b(a);
}

callback(test, 'dog'); //alerts 'dog'

因此,在您的代码中,test(f1)可以正常工作。

答案 1 :(得分:2)

window[callback1]();

根据用途,我更愿意准备单独的功能图。

var funcMap = {
   f1: function() {...},
   ...
};
funcMap['f4'] = function() {...};
function test(callback1) {
    funcMap[callback1]();
}

它肯定不会膨胀window命名空间并且更安全(窗口有更多浏览器提供的方法)。

不要使用eval - 它是邪恶的!

答案 2 :(得分:0)

您可以使用eval()执行以字符串形式传递的函数。但是已弃用以使用eval。

示例:

function test(someFunctionName) {
        eval(someFunctionName);
    }

答案 3 :(得分:0)

写点像

function test(callback1) {
    eval(callback1 + "()");
}

然后callback1应该是一个字符串