var不附加到global

时间:2019-07-12 15:08:56

标签: javascript node.js this var

我正试图了解该关键字。但是问题出在节点环境上。我在Chrome Developer工具中得到了预期的行为,但是相同的代码在节点环境中无法正常工作。

当我们在全局上下文中创建var时,它应该位于全局(节点)或窗口(浏览器)内部,但是在节点环境中,它不会附加到文档中。

我只是测试简单的3行代码,这些代码在chrome中可以正常使用。

这是针对Node环境的

var color = 'red';

console.log(this.color);
console.log(global.color)

这是适用于浏览器的

var color = 'red';

console.log(this.color);
console.log(window.color)

对于节点环境,我收到未预期的未定义。

1 个答案:

答案 0 :(得分:3)

这是软件开发规则:不要依赖粘贴在thisglobalmodule相关对象上的变量。范围可能会有所不同,并导致意外的行为和错误。使用明确的(this|global|module.exports).varName绑定。

但是,如果您只是想了解节点中的工作原理,

  • 代码在执行时被包装到IIFE中,将this的值设置为module.exports(而不是global)。
  • global的访问在各个模块中都是持久的,因此,如果您在模块中写入global.foo='foo',然后在bar.js中要求它,则global.foo将设置为{{1} 'foo'中的}。 不建议在大多数情况下直接使用bar.js-坚持使用globalexports
  • 根据the specsrequire不应固守于var:有一些例外情况(请参阅下文),但是编写代码时不应依赖于此< / li>

相关问题: