我已经收到一个node.js应用程序,可以放入我负责的生产环境中(我是unix管理员)。主文件(启动应用程序的文件如下):
var module1 = (require('./module1.js')), ls;
var module2 = (require('./module2.js')), rd;
var module3 = (require('./module3.js')), rs;
var module4 = (require('./module4.js')), rd;
var module5 = (require('./module5.js')), rd;
var module6 = (require('./module6.js')), rd;
var module7 = (require('./module7.js')), rd;
出于好奇(我不是javascript / node.js程序员),我试图在Internet上查找语法。我找到的最接近的是
var module = require('./module.js');
,但没有包含括号和rd / rs / ls后缀的东西……
将'require ...'放在括号内并添加后缀rd,rs,ls的目的是什么?
一些说明: 我问了一位程序员,他告诉我每个模块都启动一个不同的Web应用程序(使用Express模块)。 2.编写此部分的原始程序员不再与公司合作,无法访问,并且没有人希望接触应用程序的这一部分:-(
答案 0 :(得分:3)
在JavaScript中,当您使用var
声明变量时,可以一次声明多个以逗号(,
)分隔的变量。
例如:
var v1 = "example", v2 = "example2", v3;
v1
,v2
既存在又具有值。 v3
存在,但其值未定义。
您的情况是:
var module1 = (require('./module1.js')), ls;
我不知道require('./module1.js')
返回什么,但是为了简单起见,假设它包含module.exports = "abc"
,这意味着require('./module1.js')
将返回"abc"
。>
这意味着该行实际上是:
var module1 = "abc", ls;
module1
的值为"abc"
,而ls
的值为undefined
。
现在,您重复一个后缀的事实确实很奇怪,并且似乎没有任何实际用途。它绝对不遵循包含模块的典型模式。它们只是具有undefined
值的变量(从提供的代码中显示)。也许它们会在代码库的其他地方使用。
我问了一位程序员,他告诉我每个模块(使用Express模块)启动一个不同的Web应用程序
在NodeJS中,默认情况下,每个模块都有一个module.exports
对象,它只是一个空对象{}
。如果在那些必需的模块内,它没有重新分配或添加到module.exports
上,那么require将仅返回一个空对象。
但是,该模块仍在执行,因此该模式(有些人可能将其称为反模式)是副作用模块。如果所需的模块除了会引起副作用(在这种情况下,这将启动Express应用程序,并可能将侦听连接绑定到其他端口)没有作用,但没有API或用途。
作者本来可以写
require('./module1.js');
require('./module2.js');
达到相同的结果。当然,如果没有var
关键字,他们就无法同时声明ls
,rs
和rd
,这可能就是作者写他的方式。在提供的代码中,这些变量的意义或目的仍然不清楚。