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 + ‘(…)’) 却可以运行。这是为什么?

立即学习“Java免费学习笔记(深入)”;

关键在于圆括号的含义。在 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 + ‘(…)’) 却可以运行,这是为什么?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2657119.html

(0)
上一篇 2025年3月7日 10:02:44
下一篇 2025年3月7日 10:02:50

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JavaScript 中动态调用函数时,如何正确传递参数?

    变量动态调用函数 在 javascript 中,可以通过传入变量作为函数名来动态调用函数。然而,需要特别注意传递参数的方式。 如问题所示,代码中使用以下语法: eval(func + ‘(func_parm1,func_parm2)’); …

    2025年3月7日
    100
  • Eval() 函数在动态调用函数时如何处理参数类型?

    js中使用可变函数名和参数 本文探讨如何使用传入的变量作为要调用的函数名和参数。 问题:函数调用的eval()用法 问题代码中尝试使用eval()来动态生成函数调用,但只有一种写法可以正常运行: eval(func+'(func_parm1…

    2025年3月7日
    200
  • JavaScript 构造函数中方法定义为何无法被调用?

    js 大佬不懂为啥原因之 a 对象的 b 方法 网友提问: 在 html5 中使用 jquery 时遇到了问题,如下代码所示: $(function() { var temp = new a(); temp.b();})var a = fu…

    2025年3月7日
    200
  • typescript 接口组合

    TypeScript 接口组合允许将多个接口组合成一个新的接口,通过 & 运算符连接,提供代码重用、简化和类型安全,用于创建具有多个接口特性的新接口、扩展现有接口或创建复杂类型约束的对象类型。 TypeScript 接口组合 组合接…

    2025年3月7日
    200
  • typescript实现接口教程

    通过使用 implements 关键字,可以在 TypeScript 中通过实现接口来定义对象或类的形状。接口不包含实现细节,但可以提高代码可读性、允许类型检查、促进代码重用和模块化。 TypeScript 中如何实现接口? TypeScr…

    2025年3月7日
    200
  • typescript类接口与类型有哪些

    类接口和类型是 TypeScript 中定义类结构和行为的两种机制。类接口用于定义类的公共 API,而类型用于定义类的完整结构,包括私有实现细节。主要区别在于访问性(接口仅公开类成员,而类型公开全部成员)、继承(接口支持多重继承,而类型仅支…

    2025年3月7日
    200
  • typescript时间类型

    TypeScript时间类型包括:Date:特定日期Time:特定时间(无日期)DateTime:日期和时间的组合,提供now()、add()、subtract()和format()方法。 TypeScript 时间类型 TypeScrip…

    2025年3月7日
    200
  • typescript引l用类型

    TypeScript 中的引用类型允许变量引用另一块内存中的值,可使用 any 或 never 类型创建。引用类型只能赋值给引用类型,值通过 * 操作符访问。引用类型与原始类型不同,它存储的是值的引用,而不是实际值,影响值传递和内存管理。 …

    2025年3月7日
    200
  • typescript类型交集

    TypeScript 类型交集允许将多个类型合并成一个新类型,包含原始类型的共性。使用 & 运算符创建类型交集,例如:type CombinedType = Type1 & Type2;。类型交集优点包括代码重用、提高可读性…

    2025年3月7日
    200
  • typescript常用技巧

    TypeScript 中常用的技巧包括:类型推断:根据值推断变量类型,减少类型注解。可选属性:使用 ? 运算符标记属性可以存在或不存在。联合类型:允许变量具有多种类型。函数重载:为同一函数定义不同参数列表的多个实现。类型别名:为现有类型创建…

    2025年3月7日
    200

发表回复

登录后才能评论