我想在函数中构造一个数组。
下面的示例将数组作为单个参数传递,然后尝试在函数中对参数进行重构。看起来很简单,但是节点抛出了一个错误。
// 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怎么可能是未定义的?
发布于 2015-12-06 06:17:08
析构不适用于香草节点v5.1.x,因为析构仍然被认为是“进行中”的特性。
引发let is not defined ReferenceError是因为块作用域声明当前是仅限于严格模式。
因此,要使上述代码工作,需要使用harmony_destructuring标志调用节点,并且代码需要在严格模式下运行。将"use strict"添加到文件的顶部,并运行以下命令:
$ node --harmony_destructuring ./volume.js节点还提供了一个--use_strict标志,但我更愿意声明每个文件。
node.js文档 (如@Shashank在评论中所引用的当前5.1.1版)、ES6/ES6 2015功能分为三类:
--harmony标志。使用协调标志运行节点,node --harmony只启用分阶段功能。在过程中,需要单独启用像析构这样的功能。以下是节点v.5.1.1中正在进行的标志的列表:
--harmony_modules -和谐模块--harmony_regexps -和谐正则表达式扩展--harmony_proxies -和谐代理--harmony_sloppy_function -和谐的软性函数块作用域--harmony_sloppy_let -和谐进入草率模式--harmony_unicode_regexps -和谐的unicode正则表达式--harmony_reflect -和谐反映API--harmony_destructuring -和谐破坏--harmony_default_parameters -和谐默认参数--harmony_sharedarraybuffer -和谐共享缓冲区--harmony_atomics -和谐原子--harmony_simd -和谐simdhttps://stackoverflow.com/questions/34112606
复制相似问题