Node.js和JavaScript有时会使像我这样的初学者感到困惑。试用摩卡和导出,我在源代码typoo.js中做了一个错字:

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


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

坦白说,我对结果感到满意。它按我的意愿工作,而不是将导出与函数定义分开。逗号怎么会出乎我的意料,但却符合我的意图?

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


摩卡日志“试用”

最佳答案

在松散模式下分配给未声明的标识符会创建一个全局变量(我称之为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/

10-11 20:06