我应该在构造函数

时间:2017-07-03 09:18:02

标签: javascript node.js module codacy

我正在使用Codacy作为我的项目,并且我收到一条警告,说我不应该使用我后来声明的变量,这是非常合乎逻辑的。但是,这应该适用于构造函数。

这是我的主要文件结构:

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

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

function myObject(input) {
}

myObject.prototype = {
}

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

1 个答案:

答案 0 :(得分:2)

由于功能提升,这会在module.exports中加上正确的功能

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

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

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

由于ReferenceError: myObject is not defined范围规则,这会引发let 异常

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

因此const确定范围是这样的:

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

另一方面,如果您将module.exports = myObject;放在最后,所有这些内容都会按预期运行 - 如果您遵循以下条件,则无论如何都必须执行此操作Airbnb编码风格:

或者如果你使用一些linter规则,例如这个ESLint规则:

  

禁止早期使用(不使用之前定义)

     

在JavaScript中,在ES6之前,变量和函数声明被提升到作用域的顶部,因此可以在代码中的正式声明之前使用标识符。这可能令人困惑,有些人认为最好在使用之前声明变量和函数。

     

在ES6中,块级绑定(let和const)引入了一个“临时死区”,其中将抛出ReferenceError,并在声明之前尝试访问该变量。