解析函数中的数组失败,“let is not defined”?

时间:2015-12-06 00:33:00

标签: javascript node.js ecmascript-6

我想在函数内构造一个数组。

以下示例将数组作为单个参数传递,然后尝试解析函数内部的参数。看起来很简单,但是节点会抛出错误。

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

volume([2,3,4]);

使用$ node volume.js(v5.1.1)运行该命令会返回以下错误:

./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未定义?

1 个答案:

答案 0 :(得分:1)

解构不适用于vanilla node v5.1.x,因为解构仍被认为是&#34;正在进行中&#34;特征。

引发let is not defined ReferenceError,因为块范围声明当前为limited to strict mode

因此,要使上述代码起作用,需要使用harmony_destructuring标志调用节点,并且代码需要以严格模式运行。将"use strict"添加到文件顶部并运行:

$ node --harmony_destructuring ./volume.js

节点还提供--use_strict标志,但我更喜欢为每个文件声明。

node.js documentation(当前v5.1.1,由@Shashank在评论中引用),ES6 / ES2015功能分为三类:

  • 送货 - 默认启用
  • 已暂存 - 几乎就绪,已使用--harmony标记批量启用。
  • 正在进行中 - 已实验,可以单独启用

带有和声标志的运行节点node --harmony仅启用分段功能。正在进行的功能,如解构需要单独启用。这是节点v.5.1.1中进行中标志的列表:

  • --harmony_modules - 和谐模块
  • --harmony_regexps - 和声正则表达式扩展
  • --harmony_proxies - 和谐代理
  • --harmony_sloppy_function - 和谐草率功能块范围
  • --harmony_sloppy_let - 和谐让人参与草率模式
  • --harmony_unicode_regexps - 和声unicode regexps
  • --harmony_reflect - 和谐反映API
  • --harmony_destructuring - 和谐解构
  • --harmony_default_parameters - 和谐默认参数
  • --harmony_sharedarraybuffer - harmony sharedarraybuffer
  • --harmony_atomics - 和谐原子
  • --harmony_simd - 和谐simd