在一个函数中解构一个数组失败,“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