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
相关产品推荐
相关产品推荐

