var module = require() 或 const {module} = require()?

var module = require() or const {module} = require()?

这两个 require 方法有什么区别:

1. var xx = require('module')
2. const {xx} = require('module')

我看到第一个 onde 我可以将 xx 作为变量访问,所有脚本都由模块导出..第二个 xx 是未定义的。如何访问第二个 "method" 或者它是一种构建模块以使用 {}

的方法

谢谢

第一个将完整的模块句柄放在一个名为 xx.

的变量中

第二个从模块句柄中获取 xx 属性 并将其放入名为 xx 的变量中。因此,第二个将与:

const xx = require('module').xx;

另外,第一个使用 var,第二个使用 const,但我想您已经知道其中的区别。


换个说法:

这个:

const {xx} = require('module');

是这个的快捷方式:

const xx = require('module').xx;

在使用 require() 时作为快捷方式最有用,当您想从模块中获取一堆属性并将它们全部分配给模块中的顶级变量时,如下所示:

const {xx, yy, zz, aa, bb, cc} = require('module');

如果您不使用对象解构语法,这显然需要比单行代码多得多的代码来复制。

仅供参考,所有这些只是 对象解构 的一种形式(ES6 中添加到 Javascript 的特性)。它不是 require() 的任何特定内容,只是 require() 经常 returns 一个对象,它具有人们感兴趣的一堆属性。请参阅这篇文章 "A Dead Simple into to Destructuring" 以获得很好的总结对象解构的作用。

这是因为你的模块被导出为一个带有 out 方法 xxx 的对象。 示例:

module.exports ={abc : ()=>{}}
  1. var xx = require('module') ,你可以调用函数 abc : xxx.abc()
  2. 你只能通过 const {abc} = require('module') 调用 abc 你不能在情况 2 中调用 xxx 因为没有名称为 xxx
  3. 的方法

这两个在两个方面不同:

  1. xx 的常量性:在第一种情况下,添加语句 xx = 5; 是合法的,但在第二种情况下则不合法,因为您将 xx 声明为常量。

  2. 在第二个示例中,您使用了解构。解构从对象中获取元素并将它们直接分配给变量。例如:

var a = { "x": 1, "y": 2};

var { y } = a;
// This is equivalent to:
var y = a.y;

然后你的第二个语句只是从你的模块中获取 xx 属性,就像你所做的那样:

const xx = require('module').xx;
1. var xx = require('module')
2. const {xx} = require('module')

首先,var是变量类型,定义后可以修改值; const 值定义后不能修改。

其次,var xx指的是module的主出口; const { xx } 指的是 module 导出的 属性。


示例 1. 模块

const xx = {}
module.exports = xx

示例 2. 模块

const xx = {}
const yy = {}
module.exports = {
  xx,
  yy,
}

否则...


示例 1. 模块

const xx = {}
export default xx

示例 2. 模块

const xx = {}
const yy = {}
export default {
  xx,
  yy,
}