命名闭包会污染全局/窗口对象吗?

kor*_*dge 7 javascript coding-style v8 node.js

根据这个节点样式指南,给闭包一个名字是一个很好的做法:

req.on('end', function onEnd() {
  console.log('winning');
});
Run Code Online (Sandbox Code Playgroud)

错误

req.on('end', function() {
  console.log('losing');
});
Run Code Online (Sandbox Code Playgroud)

但是,我习惯于思考

function someName() { someStatements(); }
Run Code Online (Sandbox Code Playgroud)

...语法作为创建全局变量someNamewindow.someName该函数的东西.这真的是一个很好的做法,还是一个非常糟糕的风格指南?

Mah*_*ahn 3

在node.js中,您所描述的内容不会污染全局上下文

鉴于:

function someName() { someStatements(); }
Run Code Online (Sandbox Code Playgroud)

global.someName将被定义。然而以下情况:

setTimeout(function someName() { someStatements(); }, 500);
Run Code Online (Sandbox Code Playgroud)

不会设置。global.someName

这似乎只是一个审美问题。我使用 node.js v0.8.4 对此进行了测试,但大多数现代浏览器中应该存在相同的行为。