Javascript 在函数中解构数组失败,返回“0”;“let”是不定义的;?
我想在函数中分解数组 下面的示例将数组作为单个参数传递,然后尝试在函数内对参数进行分解。看起来很简单,但节点抛出了一个错误Javascript 在函数中解构数组失败,返回“0”;“let”是不定义的;?,javascript,node.js,ecmascript-6,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; ^ ReferenceEr
// 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
/volume.js:2
设[x,y,z]=box;
^
ReferenceError:未定义let
在体积上(./volume.js:2:3)
反对。(/卷js:5:1)
在模块处编译(Module.js:425:26)
在Object.Module.\u extensions..js(Module.js:432:10)
在Module.load(Module.js:356:32)
在Function.Module.\u加载(Module.js:313:12)
位于Function.Module.runMain(Module.js:457:10)
启动时(node.js:138:18)
在node.js:974:3
还有其他方法可以解决这个问题,但我不明白上面的例子为什么不起作用。为什么这会抛出一个错误?
怎么能让
不被定义 对vanilla node v5.1.x来说,解构不起作用,因为解构仍然被视为“正在进行”的功能
未定义let
ReferenceError,因为块作用域声明当前未定义
因此,要使上述代码正常工作,需要使用harmony\u destructuring
标志调用节点,并且代码需要在严格模式下运行。将“use strict”
添加到文件顶部并运行以下操作:
$ node --harmony_destructuring ./volume.js
Node还提供了一个--use\u strict
标志,但我更愿意为每个文件声明它
ES6/ES2015功能(当前版本为v5.1.1,由@Shashank在评论中引用)分为三类:
- 配送-默认启用
- 分阶段-几乎准备就绪,使用
标志启用批量李>--harmony
- 正在进行中-实验性,可单独启用
节点--harmony
仅启用分段功能。需要单独启用正在进行的功能,如分解结构。以下是节点v.5.1.1中的进行中标志列表:
——和声模块——和声模块
——harmony正则表达式扩展——harmony\u regexps
-和谐代理-和谐\u代理
——和谐函数块作用域——和谐函数
-和声let处于sloppy模式--和声\u sloppy\u let
——harmony unicode regexps——harmony\u unicode\u regexps
-和谐反映API--和谐反映
——和声分解——和声分解
——和声默认参数——和声默认参数
——harmony sharedarraybuffer——harmony\u sharedarraybuffer
- 和谐原子
——harmony simd——harmony\u simd
let
设置--harmony
标志。你在使用那个标志吗?我这么说的原因是因为这个页面:我尝试使用node--harmony
和node--harmony\u destructuring
与destructuring赋值一起使用,两者都给出了与使用node 4.2.2时相同的错误。然而,使用babel,它可以正确编译。使用--harmony
运行不会改变任何东西。而且,我认为我们不再需要和谐旗了。Node/JS移动得非常快,答案中提到的v0.12版本是一些主要的版本,现在已经很旧了。ps,一旦Node中可以进行解构,您可以将其写成函数卷([x,y,z]){return x*y*z;}
或者更好的常量卷=([x,y,z])=>x*y*z代码>