Javascript 如何执行包含函数名和参数的字符串?

Javascript 如何执行包含函数名和参数的字符串?,javascript,eval,Javascript,Eval,在javascript中,我有一个如下字符串: "doSomething('param1','param2')" <a id="YesButton" onclick="closeModalView_Yes("doSomething('param1','param2')")"> 我想执行它。我知道我通常可以使用 window['doSomething']('param1', 'param2'); 但只有当我的函数名与参数分开时,这才有效。就我而言,它们已经结合在一起了。我想我可以

在javascript中,我有一个如下字符串:

"doSomething('param1','param2')"
<a id="YesButton" onclick="closeModalView_Yes("doSomething('param1','param2')")">
我想执行它。我知道我通常可以使用

window['doSomething']('param1', 'param2');
但只有当我的函数名与参数分开时,这才有效。就我而言,它们已经结合在一起了。我想我可以使用eval(),但大家一致认为应该避免使用eval。还有别的办法吗

编辑: 要回答有关更多信息的请求:我使用以下字符串:

"doSomething('param1','param2')"
<a id="YesButton" onclick="closeModalView_Yes("doSomething('param1','param2')")">

其中closeModalView_Yes将关闭模式是/否窗口,然后执行给定的函数,尽管有时我可能会将doSomethingElse(参数1)传递给它,它只接受一个参数。

使用eval,就像:

eval( "console.log( 'hey', 'here I am' )" );
然而,这是不推荐的

如果可以(我们仍然没有关于您案例的太多信息),在模板中的
标记之间呈现JavaScript,使其成为“常规代码”,更易于调试

另外一个好的做法是传递数据(即使用JSON)而不是代码。尝试重新思考您的逻辑或提供其他信息

连同

function closeModalView_Yes(callback) {
    // do whatever needs to be done to close the window
    // and after that
    callback();
}
顺便说一句,以你目前的方法,HTML甚至是无效的,它需要被修改

<a id="YesButton" onclick="closeModalView_Yes(&quot;doSomething('param1','param2')&quot;)">
<!--                                          ^^^^^^                              ^^^^^^ -->

而不是内联属性。

如果您知道字符串中的内容并且永远不会感到惊讶,那么就使用eval。我的意思是,你不能允许用户分配字符串的值。你是怎么得到这个字符串的,为什么?您不能将其设置为数组
['doSomething','param1''param2']
?为什么不将回调传递给
closeModalView\u Yes
?类似于
closeModalView_Yes(函数(){doSomething('param1','param2');})
。关于“安全性”,使用
eval
或使用
script
元素来执行代码没有什么区别。@FelixKling在安全性方面-没有太多。在调试方面——是的!;)我同意。但是,由于您在同一段中提到了这两个问题,因此听起来似乎
script
更安全。我只是想澄清一下:)@FelixKling同意了。修正了答案以避免误解。