繁体   English   中英

我应该在构造函数之上还是之下都包含module.exports

[英]Should I include module.exports above or below constructor

我在我的项目中使用Codacy ,并且收到警告说我不应该使用稍后声明的变量,这是很合逻辑的。 但是,这对于构造函数应该可以正常工作。

这是我的主要文件结构:

/* Export */
module.exports = myObject; // this line

/* Import */
var otherObject = require('./otherObject');

function myObject(input) {
}

myObject.prototype = {
}

在对象构造函数声明之前进行导出是否会发生任何问题? 我应该将导出行移动到构造函数下方吗?

由于函数吊起,这会将正确的函数放在module.exports中:

module.exports = myObject;
function myObject(input) {
}

由于变量提升,这会将undefined放在module.exports (没有错误):

module.exports = myObject;
var myObject = function (input) {
};

这将引发ReferenceError: myObject is not defined由于let作用域规则, ReferenceError: myObject is not defined 异常

module.exports = myObject;
let myObject = function (input) {
};

这也将因为const作用域的原因:

module.exports = myObject;
const myObject = function (input) {
};

另一方面,如果您将module.exports = myObject;放进module.exports = myObject; ,那么所有这些都将按预期工作module.exports = myObject; 最后-如果您遵循Airbnb编码风格,则无论如何都必须这样做:

或者,如果您使用一些林特规则,例如此ESLint规则:

禁止提前使用(定义前不得使用)

在JavaScript中,在ES6之前,变量和函数声明被提升到作用域的顶部,因此可以在代码的形式声明之前使用标识符。 这可能会造成混淆,并且有些人认为最好始终在使用变量和函数之前声明它们。

在ES6中,块级绑定(let和const)引入了一个“时间盲区”,在该变量声明之前,如果尝试访问该变量,则将引发ReferenceError。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM