在JavaScript中通过String调用函数

时间:2012-05-31 09:56:29

标签: javascript function

好的,我有这个小代码

http://jsfiddle.net/laupkram/yJtyD/

现在它还没有真正起作用。我一直在关注所有现有的问题和答案,但我无法解决这个问题。

我真的想在不使用eval()

的情况下调用函数

我错了?

2 个答案:

答案 0 :(得分:4)

你有一个拼写错误(imafunc/iamfunc),纠正它&你可以(假设全球范围);

var fn = window["iamfunc"];

if (typeof fn === 'function') {
    fn("hello world");
}

答案 1 :(得分:1)

您无法直接执行字符串。如果字符串指定的函数是全局定义的,则可以通过

访问该函数
window[ fn ]();

因此,在您的情况下,这会将您的代码转换为以下内容:

var fn = "imafunc";
if (typeof window[ fn ] === 'function') {
     window[ fn ]("hello world");
}

function imafunc(str) {
    alert(str);
}

如果函数仅在另一个函数的范围内定义,则必须使用eval,这有一些性能上的缺点,通常被认为是不好的做法(see, e.g., MDN)。

PS:这不会在jsFiddle中工作,因为他们使用沙盒,就像在另一个函数中定义imafunc()一样。你必须改变包装使用"没有包装"。