node.js - 为什么无需在其他文件中使用 `var` 即可访问未声明为 `require` 的变量?

标签 node.js

举个例子

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

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

$ node main.js
1.1

请注意我是如何在没有 var 的情况下在 main.js 中声明 App 的。这使我可以从 mymod.js 访问 App,而无需调用 require。如果我用 var 声明 App,这将不起作用。

我想了解为什么会这样?这是 node.js 的预期行为还是错误?此行为是否符合 ECMAScript 或 CommonJS 标准?

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

最佳答案

如果你不使用 var 给一个变量赋值,它就自动成为一个全局变量。这就是 JavaScript 的工作方式。如果您将 'use strict';(需要引号)放在 js 文件的顶部,则会变成错误。

关于node.js - 为什么无需在其他文件中使用 `var` 即可访问未声明为 `require` 的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17951685/

相关文章:

node.js - 如何使用 Mongoose 将查询结果返回给变量

javascript - 如何在 PugJS 的路由器中触发 onclick 功能?

javascript - sqlite3更新查询刷新 Electron 渲染器进程

node.js - Node Route.get() 需要回调函数,但得到了一个 [object undefined]

javascript - 在 Node.js 上处理昂贵的任务(嵌套 for 循环)

javascript - 如何在 Node.js 中的同一进程内监听同一地址上的不同 UDP 端口

node.js - 抛出新的 TypeError ('Router.use()requires a middleware function but got a ' + gettype(fn))v

node.js - 在 Bot Framework 中,我应该使用什么唯一 ID 来保存 session ?

node.js - Node and Express - 路由特定资源的 Assets 管理器

node.js - Google Cloud Endpoints 等同于 API 网关,还是 Endpoints 等同于微服务?