为什么这个传播操作符会使运行时崩溃?

有一个更好的方法来问这个问题,但我不确定确切的原因。

这是第一个代码片段,我马上解构它。

this.argArr = [['arg1', 'arg2'], ['foo', 'bar'], ['you get ', 'the point']]; this.evalArgsFromArr = function () { var out = []; for (var _ = 0; _ < parent.argArr.length; _++) { out.push(someFunction(...parent.argArr[_])); // This part crashes } return out; }; 

当然,这个函数是一个对象的一部分。

这个想法是, parent.argArr每个项目parent.argArr应该是一个数组,其中包含someFunction()两个参数, someFunction()参数也可以方便地作为输出的可读结果。 我的理解是,在一个可迭代的对象(如存储在parent.argArr的数组)上使用,spread运算符分别输出每个单独的值。 (例如, for循环的第一次运行应输出someFunction('arg1', 'arg2') 。)

每当我在Node.js或PHP中运行一个包含这个文件的文件时,运行时间几乎立即崩溃,尽pipe它还没有被调用,引用spread操作符是意外的。

这是错误信息,如果有帮助: 错误信息

我认为这是使用下划线作为variables名的惩罚。 但严重的是,看看你的代码,它似乎应该工作,但只有你的节点解释器是足够新的支持。

要在Node版本中看到spread操作符的支持,请参阅:

要在原生不支持的平台上使用现代语法,请使用Babel:

当然,我们不能真正的testing它,因为你没有提供一个可运行的例子。

但是你可以看到这个答案:

  • JavaScript中多个数组的笛卡尔积

并看看你是否可以在那里运行的例子。 它使用扩展运算符,如果它被testing正常工作。 如果它运行在你的系统上,那么你应该可以使用扩展操作符。 如果没有,那么你应该真的升级节点,因为没有理由使用这样一个过时的版本。

如果一切都失败了,那么你应该总是能够改变:

 someFunction(...array); 

至:

 someFunction.apply(undefined, array); 

看文档:

  • Function.prototype.apply()(MDN)
  • 扩展语法(MDN)

顺便说一句,我不确定你的意思是说一行“喜欢崩溃” – 不是总是崩溃吗? 这将是非常奇怪的。

您必须删除“…”,请尝试:

 this.argArr = [['arg1', 'arg2'], ['foo', 'bar'], ['you get ', 'the point']]; this.evalArgsFromArr = function () { var out = []; for (var _ = 0; _ < parent.argArr.length; _++) { out.push(someFunction(parent.argArr[_])); } return out; };