好的,我有这个小代码
http://jsfiddle.net/laupkram/yJtyD/
现在它还没有真正起作用。我一直在关注所有现有的问题和答案,但我无法解决这个问题。
我真的想在不使用eval()
的情况下调用函数我错了?
答案 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()
一样。你必须改变包装使用"没有包装"。