【问题标题】:What is the difference between var bar = require('myModule') and only require('myModule')?var bar = require('myModule') 和 only require('myModule') 有什么区别?
【发布时间】:2016-01-05 15:11:24
【问题描述】:

我已经看到在一些项目中它是常用的

var myModule = require('myModule');

但在其他一些情况下,它会被用作:

require('myModule');

这两者有什么区别?

【问题讨论】:

  • 什么是差异。在var some = someFn();someFn(); 之间?
  • 取决于它的声明位置。
  • 我还是不明白,我的意思是...我知道 var some = someFn(); 之间的区别和一些Fn();但我在 require 模式下看不到它。

标签: javascript node.js require


【解决方案1】:

一个将模块分配给一个变量,另一个只需要它。加载并运行脚本。

使用require('foo'),您需要模块并加载入口点脚本。这将在模块第一次加载时评估该脚本中的任何静态代码。您无法访问任何导出,并且以后无法在不再次要求的情况下引用该模块。

var bar = require('foo') 的行为类似,除了它保留对导出的引用并允许您以后使用它们。

当“模块”实际上是某种其他类型的资源(例如 CSS 文件)并且require 运行一些代码以将该 CSS 加载到当前页面时,通常会看到 require-without-assign 形式。在常见的 JS 模块中,没有任何初始化代码,require-without-assign 表单会预加载一个模块,但几乎没有其他作用。

采取如下模块:

let connection = new ServerConnection();

export default class Connection {
  static getConnection() {
    return connection;
  }
}

require-without-assign 表单将加载脚本、运行它并创建连接。你将无法使用它,但它会存在。

require-with-assign 表单将加载、运行、创建并提供参考。您将可以拨打bar.getConnection() 并获得连接的访问​​权限。

在上面的示例中,如果您使用 require 而不使用分配,您将无法访问连接并且永远无法关闭它,这可能是一个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-17
    • 2019-02-27
    • 2013-03-06
    • 2013-05-16
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多