在一个函数中解构一个数组失败,“let is not defined”?

我想解构一个函数内的数组。

下面的示例将一个数组作为单个parameter passing,然后试图解构函数内部的参数。 看起来很简单,但节点抛出一个错误。

// volume.js function volume(box) { let [x,y,z] = box; return x * y * z; } volume([2,3,4]); 

使用$ node volume.js$ node volume.js )运行该$ node volume.js返回以下错误:

 ./volume.js:2 let [x,y,z] = box; ^ ReferenceError: let is not defined at volume (./volume.js:2:3) at Object.<anonymous> (./volume.js:5:1) at Module._compile (module.js:425:26) at Object.Module._extensions..js (module.js:432:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:313:12) at Function.Module.runMain (module.js:457:10) at startup (node.js:138:18) at node.js:974:3 

还有其他方法可以解决这个问题,但我不明白为什么上面的例子不起作用。 为什么这会抛出一个错误? 怎么可以let undefined?

解构不适用于vanilla节点v5.1.x,因为解构仍然被认为是“正在进行”的function。

由于块范围声明目前仅限于严格模式,因此let is not defined引用ReferenceError。

因此,为了使上述代码正常工作,需要使用harmony_destructuring标志来调用节点,并且代码需要以严格模式运行。 在文件的顶部添加"use strict"并运行:

 $ node --harmony_destructuring ./volume.js 

Node还提供了--use_strict标志,但我更愿意声明每个文件。

node.js文档 (当前为v5.1.1,由@Shashank在评论中引用),ES6 / ES2015的function分为三类:

  • 发货 – 默认启用
  • 分阶段 – 几乎就绪,用--harmony标志启用批量。
  • 进行中 – 实验,可以单独启用

使用和谐标志运行节点, node --harmony只启用分步function。 进行中的function,如解构需要单独启用。 以下是节点v.5.1.1中进行中标志的列表:

  • --harmony_modules – 和谐模块
  • --harmony_regexps – 和谐正则expression式扩展
  • --harmony_proxies – 和谐代理
  • --harmony_sloppy_function – 和谐草率function块范围
  • --harmony_sloppy_let – 和谐进入马虎模式
  • --harmony_unicode_regexps – 和声unicode正则expression式
  • --harmony_reflect – 和谐反映API
  • --harmony_destructuring _解构 – 和谐解构
  • --harmony_default_parameters – 和谐默认参数
  • –harmony_sharedarraybuffer – 和谐sharedarraybuffer
  • –harmony_atomics – 和谐primefaces
  • --harmony_simd – 和谐simd