Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该在构造函数上方或下方包含module.exports吗_Javascript_Node.js_Module_Codacy - Fatal编程技术网

Javascript 我应该在构造函数上方或下方包含module.exports吗

Javascript 我应该在构造函数上方或下方包含module.exports吗,javascript,node.js,module,codacy,Javascript,Node.js,Module,Codacy,我在我的项目中使用了一个警告,说我不应该使用我稍后声明的变量,这是非常合乎逻辑的。然而,这对建设者来说应该很好 这是我的主要文件结构: /* Export */ module.exports = myObject; // this line /* Import */ var otherObject = require('./otherObject'); function myObject(input) { } myObject.prototype = { } 在对象构造函数声明之前导出是

我在我的项目中使用了一个警告,说我不应该使用我稍后声明的变量,这是非常合乎逻辑的。然而,这对建设者来说应该很好

这是我的主要文件结构:

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

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

function myObject(input) {
}

myObject.prototype = {
}

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

这将在
模块中放置正确的函数

module.exports = myObject;
function myObject(input) {
}
module.exports = myObject;
var myObject = function (input) {
};
这将在
模块中放入
未定义的
。由于变量提升,导出
(无错误):

module.exports = myObject;
function myObject(input) {
}
module.exports = myObject;
var myObject = function (input) {
};
这将引发
引用错误:由于
let
范围规则,未定义myObject
异常

module.exports = myObject;
let myObject = function (input) {
};
这也是由于
const
scoping:

module.exports = myObject;
const myObject = function (input) {
};
另一方面,如果将
module.exports=myObject结尾-如果您遵循Airbnb编码风格,则无论如何都必须这样做:

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

不允许提前使用(定义前不使用)

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

在ES6中,块级绑定(let和const)引入了一个“临时死区”,在该死区中,任何试图在声明变量之前访问该变量的行为都会引发ReferenceError


这将把正确的功能放入
模块中。由于功能提升,导出

module.exports = myObject;
function myObject(input) {
}
module.exports = myObject;
var myObject = function (input) {
};
这将在
模块中放入
未定义的
。由于变量提升,导出
(无错误):

module.exports = myObject;
function myObject(input) {
}
module.exports = myObject;
var myObject = function (input) {
};
这将引发
引用错误:由于
let
范围规则,未定义myObject
异常

module.exports = myObject;
let myObject = function (input) {
};
这也是由于
const
scoping:

module.exports = myObject;
const myObject = function (input) {
};
另一方面,如果将
module.exports=myObject结尾-如果您遵循Airbnb编码风格,则无论如何都必须这样做:

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

不允许提前使用(定义前不使用)

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

在ES6中,块级绑定(let和const)引入了一个“临时死区”,在该死区中,任何试图在声明变量之前访问该变量的行为都会引发ReferenceError


它适用于函数声明,而不是构造函数。无论如何,这或多或少是一个风格的问题;你可以把它放在你最喜欢的地方<代码>如果(模块)
没有多大意义。@Ryan感谢关于
如果(模块)
的提示,我使用它是因为我在其他项目中看到过它,但它确实没有必要。请看一下。所有的代码都在函数声明后面…它可以很好地用于函数声明,而不是构造函数。无论如何,这或多或少是一个风格的问题;你可以把它放在你最喜欢的地方<代码>如果(模块)
没有多大意义。@Ryan感谢关于
如果(模块)
的提示,我使用它是因为我在其他项目中看到过它,但它确实没有必要。请看一下。所有代码都在函数声明后面。。。