JavaScript中,eval(func + '(' + func_parm1 + ',' + func_parm2 + ')') 无法正常运行,而 eval(func + '(...)') 却可以运行,这是为什么?
javascript 如何动态调用函数并传递参数?
假设我们有一个函数 confirm_to_func,它接受一个函数名和文本提示,并在一个弹出窗口中显示提示,要求用户确认。同时,我们想根据用户的选择调用不同的函数。
以下是 confirm_to_func 函数的代码:
function confirm_to_func(func, txt, ...func_parm) { art.dialog({ title: "确认执行该操作", content: txt, icon: "question", lock: "true", window: "top", ok: function () { func(...func_parm); }, cancel: function () {} }); }
问题中提到,使用 eval(func + '(' + func_parm1 + ',' + func_parm2 + ')') 的写法无法正常运行,而 eval(func + '(...)') 却可以运行。这是为什么?
关键在于圆括号的含义。在 javascript 中,圆括号不仅可以表示函数调用,还可以表示分组操作。
在 eval(func + '(' + func_parm1 + ',' + func_parm2 + ')') 中,圆括号将 func_parm1 和 func_parm2 分组为一个字符串,而不是函数参数。因此,实际执行的代码是:
eval(func + "(func_parm1, func_parm2)");
这等价于:
eval('func"func_parm1", "func_parm2")');
由于 func_parm1 和 func_parm2 是字符串,所以整个字符串将被作为函数名来执行,而不是将它们作为参数传递给函数。
而 eval(func + '(...)') 是正确的,因为它不会对圆括号内的内容进行分组操作,而是直接将其传递给函数。
以上就是JavaScript中,eval(func + '(' + func_parm1 + ',' + func_parm2 + ')') 无法正常运行,而 eval(func + '(...)') 却可以运行,这是为什么?的详细内容,更多请关注其它相关文章!