Существует ли использование анонимных функций при написании модуля nodejs. Я понимаю, что мы используем анонимную функцию для ограничения объема переменных/функций, используемых для конкретного модуля. Однако в nodejs мы используем modules.exports, чтобы сделать функцию или переменную доступной вне модуля, следовательно, не должна ли быть анонимной функция ненужной?Использование анонимных функций в nodejs
Причина, по которой я прошу об этом, состоит в том, что популярные модули узлов (например, 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]
Узел.js-модули обеспечивают инкапсуляцию самих себя. Поэтому нет необходимости обертывать назначение 'module.exports' таким образом. Возможно, вам понадобится, если у вас есть вложенные классы. Но сам этот факт на самом деле намекнул бы на перенос этого вложенного класса в другой модуль ... –