3

好的,我有这个小代码

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

现在它并没有真正起作用。我一直在关注 SO 中所有现有的问题和答案,但我无法弥补。

我真的很想在不使用 eval() 的情况下调用函数

我哪里错了?

4

2 回答 2

4

你有一个错字(imafunc/iamfunc),纠正它&你可以(假设全局范围);

var fn = window["iamfunc"];

if (typeof fn === 'function') {
    fn("hello world");
}
于 2012-05-31T09:59:49.400 回答
1

您不能直接执行字符串。如果字符串指定的函数是全局定义的,您可以通过以下方式访问该函数

window[ fn ]();

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

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

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

如果该函数仅在另一个函数的范围内定义,则必须求助于eval,这有一些性能劣势并且通常被认为是不好的做法(例如,参见 MDN)。

PS:这在 jsFiddle 中不起作用,因为他们使用沙盒,这就像imafunc()在另一个函数中定义一样。您必须更改包装以使用“无包装”。

于 2012-05-31T10:01:08.953 回答