在JavaScript中通过字符串调用函数

在JavaScript中通过字符串调用函数,javascript,function,Javascript,Function,好的,我有这个小代码 现在它真的不起作用了。我一直在跟踪所有现有的问题和答案,所以我无法弥补这一点 我真的想不使用eval()调用函数 我错在哪里?您有一个输入错误(imafunc/iamfunc),请更正它&您可以(假设为全局范围) 不能直接执行字符串。如果字符串指定的函数是全局定义的,则可以通过 window[ fn ](); 因此,在您的情况下,这会将您的代码转换为以下内容: var fn = "imafunc"; if (typeof window[ fn ] === 'functi

好的,我有这个小代码

现在它真的不起作用了。我一直在跟踪所有现有的问题和答案,所以我无法弥补这一点

我真的想不使用eval()调用函数

我错在哪里?

您有一个输入错误(
imafunc/iamfunc
),请更正它&您可以(假设为全局范围)


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

window[ fn ]();
因此,在您的情况下,这会将您的代码转换为以下内容:

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

function imafunc(str) {
    alert(str);
}
如果该函数仅在另一个函数的作用域中定义,则必须求助于
eval
,这有一些性能缺点,通常被认为是不好的做法()


PS:这在JSFIDLE中不起作用,因为它们使用沙箱,这类似于在另一个函数中定义
imafunc()
。您必须更改包装以使用“no wrap”。

我已经对您的更改做了一些修改,但是将fiddle更改为
no wrap(head)
似乎不起作用,因为fiddle包装事件中的代码handlereval()是在这种情况下(以及大多数其他情况下)的最后手段,在这种情况下,您可以利用内置机制(窗口名称空间)可以吗我在窗口名称空间中填充了很多东西?呵呵,我打算滥用它…你可以创建自己的名称空间并使用它们;谢谢你,这很有效…我在想我可以通过字符串直接调用函数
var fn = "imafunc";
if (typeof window[ fn ] === 'function') {
     window[ fn ]("hello world");
}

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