javascript - module.exports 的意外简写

标签 javascript node.js

Node.js 和 JavaScript 有时会让像我这样的初学者感到困惑。尝试用 mocha 和 export,我在源码 typoo.js 中打错了:

module.exports,trial = function() {
    console.log('trial')
}

请注意 module.exports, 之后的逗号“,”,本来应该是“.”如果我没有不小心输入了逗号。

坦率地说,我对结果很满意。它按我想要的方式工作,而不是将导出与函数定义分开。 为什么逗号的效果出乎我的意料却符合我的意图?

const blah = require('../../../typoo');
trial()

mocha 记录“试用”

最佳答案

在松散模式下分配给未声明的标识符会创建一个全局变量(我称之为 The Horror of Implicit Globals )。这就是为什么你所拥有的有效,因为

module.exports,trial = function() {
    console.log('trial')
}

使用 comma operator ,其中每一边都是一个操作数。两个表达式都被求值,所以你有

module.exports

作为它自己的表达式,并且

trial = function() {
    console.log('trial')
}

作为自己的表达方式。

您几乎肯定不想创建一个全局的;相反,做你想做的事,使 trial 成为一个模块导出。如果想更简洁,可以去掉module.部分:

exports.trial = function() {
    console.log('trial')
};

(另请注意,我添加了缺少的分号。)

然后当然要使用它:

const blah = require('../../../typoo');
blah.trial();

...或该主题的任何变体,例如:

const trial = require('../../../typoo').trial;
trial();

...或者

const { trial } = require('../../../typoo');
trial();

还建议通过添加使用严格模式而不是默认的松散模式

"use strict";

到模块的顶部。在严格模式下,分配给未声明的标识符是本应出现的错误。 :-)

关于javascript - module.exports 的意外简写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50097911/

相关文章:

javascript - 在 Angular2 rc5 项目中导入 Angular2-Cookie

javascript - 为什么当我使用 Protractor 写文本时它不能正常工作

javascript - 如何将json数据一一添加到csv文件中?

javascript - 这个 useReduxState hook 和 useSelector 在性能方面的区别?

node.js - 如何使用quirer.prompt为输入添加前缀

json - 使用 text2json 将 TSV 文件转换为 JSON 不返回任何值

javascript - MongoDB,从数组中删除对象

javascript - 在 Handlebars 中调用函数原型(prototype)

javascript - i18next 从 json 文件加载翻译

javascript - 如何在 Node.js 中直接访问对象内部的对象?