2017-04-24 106 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