Friday, May 10, 2024
 Popular · Latest · Hot · Upcoming
172
rated 0 times [  177] [ 5]  / answers: 1 / hits: 6515  / 9 Years ago, tue, april 7, 2015, 12:00:00

Is there a use for anonymous functions when writing a nodejs module. I understand that we use anonymous function to limit the scope of the variables/functions used to a specific module. However, in nodejs, we use modules.exports to made a function or variable available outside the module, hence shouldn't an anonymous function be unnecessary?



The reason I ask this is because popular node modules (like async.js) extensively use anonymous functions.



Example with anonymous function



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);
}


Output:



Hello World
[ReferenceError: a is not defined]
[ReferenceError: b is not defined]


Example without anonymous function



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);
}


Output:



Hello World
[ReferenceError: a is not defined]
[ReferenceError: b is not defined]

More From » node.js

 Answers
9

You absolutely DO NOT need the anonymous function



Node guarantees you a clean namespace to work in with each file



The only things visible from each file/module are things that you explicitly export using module.exports






Your test_module2.js is much preferred though I would still make a couple changes. Most notably, you don't have to define myModule as an object in your file. You can think of the file as a module already.



test_module3.js



var a = Hello;
var b = World;

function helloWorld() {
console.log(a, b);
}

exports.helloWorld = helloWorld;

[#38089] Monday, April 6, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
albert

Total Points: 652
Total Questions: 105
Total Answers: 108

Location: Pitcairn Islands
Member since Fri, Oct 15, 2021
3 Years ago
;