You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中函数带()与不带()的区别及Node.js场景疑问

Node.js中导出函数时不带括号的原因

先看示例代码:

function find() {
    console.log("Request handler 'find' was called.");
}
function display() {
    console.log("Request handler 'display' was called.");
}

exports.find = find;
exports.display = display;

问题

  • 有时我们调用函数时带括号,有时不带。我理解在DOM事件监听器中不带括号是为了让函数仅在点击发生时执行,但在上述Node.js示例中,为何也不使用括号?

解答

这核心是函数引用和函数调用的区别:

  • 带括号find()是直接触发函数执行,会立刻运行函数体内的代码,返回的是函数执行后的结果(这里两个函数没有return语句,所以返回undefined)。
  • 不带括号find是把函数本身作为一个值来赋值,相当于把这个函数的"引用"交给exports.find,其他模块导入后,能在需要的时候再主动调用它(比如用find())。

在这个Node.js场景里,我们的目的是导出函数本身,而不是函数执行后的结果。如果写成exports.find = find(),代码运行到这行时会立刻执行find()并打印日志,然后把undefined赋值给exports.find,其他模块导入后拿到的就是undefined,根本没法再调用这个函数了。

说白了就是:现在不想执行函数,只想把函数的"使用权"传递出去,让别的模块决定什么时候执行,所以就不带括号。

内容的提问来源于stack exchange,提问作者user14460439

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 03:19:53