NodeJS异常需求 - 这里发生了什么?

时间:2017-11-17 17:16:37

标签: node.js ecmascript-6

根据https://nodejs.org/api/child_process.html

的文件

下一行发生了什么,为什么会这样?

A,B

据我所知,它只是将exec包装到另一个对象中,即

const { exec } = require('child_process');

然后有一项任务.. -Mind Blown -

2 个答案:

答案 0 :(得分:4)

您的代码示例:

const { exec } = require('child_process');

产生的结果与:

相同
const exec = require('child_process').exec;

这称为解构分配,是ES2015(ES6)中的新功能,在此处描述:MDN上的Destructuring Assignment。它允许使用各种快捷方式将源对象中的一个或多个属性分配给各种类型的目标。在这种情况下,源对象是require('child_process')的结果,所需的目标是名为exec的单个变量,它将从源接收单个命名属性。

当您指定多个属性时,它会变得更有用:

const { exec, spawn, fork } = require('child_process');

这将创建名为execspawnfork的模块级变量,这些变量包含子进程模块中的那些导出属性。在进行结构分配之前,可以做一个:

const child = require('child_process');
const exec = child.exec;
const spawn = child.spawn;
const fork = child.fork;

或者刚刚这样做了:

const child = require('child_process');

然后,使用child.exec()child.spawn()以及child.fork()来使用这些方法。正如您所看到的,解构分配是一个重要的捷径。有许多形式的解构,你可以做更高级的事情,比如指定接收变量的名称与命名的属性不同,解构可以与数组一起使用,而不仅仅是对象。

以下是关于该主题的其他几篇参考文章:

Destructuring and parameter handling in ECMAScript 6

Code Examples of destructing in ECMAScript 6

Explanation of Destructuring

答案 1 :(得分:0)

这是符合ES6规范的特殊符号。 在这里,您在具有相同名称的变量中通过require提取对象返回的属性exec的值。

const { exec } = require('child_process');
// Equals
const exec = require('child_process').exec;

您可以将somme属性提取为这样的对象。

const { exec, spawn, fork } = require('child_process');
let { a, b } = { a: 'foo', b: 'bar' };

加载库时它特别有用。

这是致电destructuring assignment