Does named closures pollute the global/window object?
Problem
According to this node style guide, giving closures a name is a good practice:
Right
req.on('end', function onEnd() { console.log('winning'); });
Wrong
req.on('end', function() { console.log('losing'); });
However, I'm used to thinking of the
function someName() { someStatements(); }
...syntax as something that creates a global variable, someName
or window.someName
for that function. Is this really a good practice, or is that a very bad style guide?
Solution
In node.js, what you describe does not pollute the global context.
Given:
function someName() { someStatements(); }
global.someName
will be defined. The following however:
setTimeout(function someName() { someStatements(); }, 500);
Will not set global.someName
.
It seems to be just a matter of aesthetics. I tested this with node.js v0.8.4, but the same behaviour should be present in most modern browsers.
Discussion
View additional discussion.