为什么在没有`var`的情况下访问变量而不必在其他文件中使用`require`?

Jay*_*esh 2 node.js

这是一个例子

$ cat main.js
App = {
  version : 1.1
};
require('./mymod.js');

$ cat mymod.js
console.log(App.version);

$ node main.js
1.1
Run Code Online (Sandbox Code Playgroud)

请注意我App在main.js中如何声明var.这让我访问Appmymod.js不用打电话require.如果我App用a 声明var,这将无效.

我想明白为什么会这样?它是node.js或bug的预期行为吗?这种行为是否与ECMAScript或CommonJS标准一致?

这个技巧提供了一种强大的机制来规避requirenode.js 的模块系统.在每个文件中定义您的对象并将它们添加到顶级App命名空间.您在其他文件中的代码将自动访问这些对象.我错过了什么?

Chr*_*res 8

如果在不使用var的情况下分配变量,则它自动成为全局变量.这就是JavaScript的工作方式.如果将'use strict';(需要引号)放在js文件的顶部,则会出现错误.