请帮忙 我这里有一个简单的例子
<script type="text/javascript" language="javascript">
function test(callback1) {
callback1();
}
var f1 = function () {
alert(1);
}
</script>
目前,测试功能的参数是一个功能,当点击abc按钮时,将调用测试功能,然后测试将调用f1。一切都和我好。
但是,我想要一个像这样的小改动:测试函数的参数将是一个字符串,我的意思是它应该是一个函数名,test('f1')而不是test(f1)。 有可能吗?我该如何实现呢?
由于
答案 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应该是一个字符串