Vue3模态框传参疑问:为何包裹的带参函数无需双括号执行
问题解答
这和Vue框架本身无关,是两个场景下的函数返回值差异导致的,本质是纯JavaScript语法问题:
1. 你提供的纯JS示例存在逻辑矛盾
你贴出的纯JS代码实际运行必然报错:
const sayhelloworld = () => say("hello world"); sayhelloworld()(); // 此处必抛出TypeError
因为sayhelloworld是一个箭头函数,调用sayhelloworld()时就已经直接执行了内部的say("hello world")逻辑,而say函数没有返回值,默认返回undefined,第二个括号相当于执行undefined(),属于非法调用。
你之前能通过双括号正常运行,说明你实际的sayhelloworld定义是返回函数的高阶函数,例如:
// 只有返回函数的情况下才需要双括号调用 const sayhelloworld = () => () => say("hello world");
这种情况下第一层调用返回内层待执行的函数,第二层调用才会真正触发say的逻辑。
2. Vue场景单括号即可执行的原因
你通过EventBus传递给弹窗的回调是() => this.Delete(file_id),这个箭头函数本身就是最终要执行的业务逻辑:
- 你调用
this.ModalProps.function()时,就已经直接触发了this.Delete(file_id)的删除操作 - 你的
Delete方法没有额外返回另一个函数,默认返回值为undefined(或者是异步操作的Promise对象) - 加第二个括号相当于尝试把
undefined/Promise当函数调用,自然会抛出异常,Vue捕获到这个异常后就输出了你看到的警告
内容的提问来源于stack exchange,提问作者Kez
相关产品推荐
相关产品推荐

