Node.js导出模块时返回函数与返回对象字面量为何运行结果不同
问题原因分析
两种写法运行效果差异的核心是allaSeconda函数的返回值类型不同,和你在index.js中的调用逻辑不匹配导致的:
- 第一种无法运行的场景
你写的allaSeconda函数直接返回calcola函数本身,执行allaSeconda()后,导出对象的eleva属性就是calcola函数:
你在index.js中调用// 此时eleva的值等价于这个函数 function calcola(num){ return num*num }eleva.calcola(9),相当于尝试从一个函数对象上读取不存在的calcola属性,拿到的是undefined,调用undefined()自然会抛出类型错误。
如果要让第一种写法正常运行,只需要把index.js的调用逻辑改成直接调用eleva即可:const {eleva} = require('./modulo') console.log(eleva(9)) // 输出81 - 第二种可以正常运行的场景
你写的allaSeconda函数返回的是{calcola}对象,这个对象的calcola属性指向平方计算函数,执行allaSeconda()后,导出对象的eleva属性就是这个包含calcola方法的对象,和你在index.js中eleva.calcola(9)的调用逻辑完全匹配,所以可以正常执行得到结果。
内容的提问来源于stack exchange,提问作者Parenti Davide
相关产品推荐
相关产品推荐

