JavaScript中,eval(func + '(' + func_parm1 + ',' + func_parm2 + ')') 无法正常运行,而 eval(func + '(...)') 却可以运行,这是为什么?

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 + '(...)') 却可以运行,这是为什么?的详细内容,更多请关注其它相关文章!