编写nodejs模块时是否可以使用匿名函数。我知道我们使用匿名函数来限制用于特定模块的变量/函数的范围。但是,在nodejs中,我们使用modules.exports在模块外部创建一个函数或变量,因此不应该不需要匿名函数吗?
我之所以这么说是因为流行的节点模块(如async.js)广泛使用匿名函数。
匿名函数示例
1)test_module.js
(function(){
var test_module = {};
var a = "Hello";
var b = "World";
test_module.hello_world = function(){
console.log(a + " " + b);
};
module.exports = test_module;
}());
2)test.js
var test_module = require("./test_module");
test_module.hello_world();
try {
console.log("var a is " + a + "in this scope");
}
catch (err){
console.log(err);
}
try {
console.log("var a is " + b + "in this scope");
}
catch (err){
console.log(err);
}
输出:
Hello World
[ReferenceError: a is not defined]
[ReferenceError: b is not defined]
没有匿名功能的示例
1)test_module2.js
var test_module = {};
var a = "Hello";
var b = "World";
test_module.hello_world = function(){
console.log(a + " " + b);
};
module.exports = test_module;
2)test2.js
var test_module = require("./test_module2");
test_module.hello_world();
try {
console.log("var a is " + a + "in this scope");
}
catch (err){
console.log(err);
}
try {
console.log("var a is " + b + "in this scope");
}
catch (err){
console.log(err);
}
输出:
Hello World
[ReferenceError: a is not defined]
[ReferenceError: b is not defined]
答案 0 :(得分:8)
您绝对不需要匿名功能
Node保证您拥有一个干净的名称空间"使用每个文件
唯一的东西"可见"来自每个文件/模块的内容是明确使用module.exports
虽然我仍会做一些更改,但您的test_module2.js
更受欢迎。最值得注意的是,您不必将myModule
定义为文件中的对象。您可以将该文件视为模块。
<强> test_module3.js 强>
var a = "Hello";
var b = "World";
function helloWorld() {
console.log(a, b);
}
exports.helloWorld = helloWorld;
答案 1 :(得分:-2)
根据我使用nodejs开发Web应用程序的经验,绝对不需要导出匿名函数!