[英]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.