【问题标题】:Node modules scope of execution [duplicate]节点模块的执行范围[重复]
【发布时间】:2016-02-27 14:12:21
【问题描述】:

我对节点有点陌生,这个问题更多地与节点模块的内部工作有关。

当我们需要一个模块时,它应该被加载并在需要它的主文件的上下文中运行(我们使用 node 命令从控制台运行的那个)。因此,由于词法范围规则,在此上下文中定义的所有函数(所需的节点模块)都应该可以访问主模块中的所有变量,但事实并非如此。例如,自定义路由模块无法访问应用实例,除非我们明确传递它。

那么这些模块是在某个孤立的范围内执行的吗?

【问题讨论】:

    标签: node.js module scope


    【解决方案1】:

    模块在相同的 v8 上下文中执行,但它们是这样做的 using vm.runInThisContext()documentation for this function 告诉您正在执行的代码 可以访问本地范围(例如 eval() 可以),但 确实 可以访问 @ 987654325@ 变量。因此,在大多数情况下,您可以将其视为一个单独的上下文(例如,无法访问局部变量、函数等),尽管从技术上讲并非如此。

    对于您的 HTTP 路由的特定用例,通常项目将传入 app 对象(假设此处为 Express)或导出父脚本安装在某个路径的 Router 实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-26
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 2018-10-09
      • 2020-04-24
      相关资源
      最近更新 更多