我想在函数内构造一个数组。
以下示例将数组作为单个参数传递,然后尝试解析函数内部的参数。看起来很简单,但是节点会抛出错误。
// 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
未定义?
答案 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