2017-04-24 84 views
1

我的朋友只是做了一些无意义的代码,或者至少我认为他是,但令我惊讶的是它没有抛出任何错误。但是他没有做到他所期望的,因为他并不知道自己在做什么。 但是现在我很好奇它做了什么,因为它不会抛出错误。 的代码看起来是这样的:javascript函数定义中的对象

var n = function(someArg, anotherArg, {help: []}){}; 

此外,将数据添加到对象时,它抛出一个错误:

var n = function(someArg, anotherArg, {help: ["something"]}){}; 

抛出: '未捕获的SyntaxError:意外的字符串'

所以为什么允许随机论证?

回答

3

这是EcmaScript 6 argument destructuring。如果你定义一个函数为:

function myfun({help: [a, b, c]}) {} 

然后,您可以将其称为:

myFun({help: [1, 2, 3]}); 

,它将分别参数ab,并c结合123。你的例子只是一个退化的例子,其中包含变量的数组是空的。

在解构参数列表中,表达式可以放在普通对象或数组中的位置必须包含变量名称,因为这是将绑定到参数对象/数组中相应元素的变量。这就是为什么第二个版本产生错误:"something"不是变量名称,它是一个字符串,所以它不能在模式中使用。

+0

啊我明白了,那很酷。我现在查找了javascript desctructuring(我从来没有听说过),并且想要离开[链接](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)if其他人也感兴趣。 – thegunmaster