2017-04-24 16 views
1

私の友人はちょうどいくつかの非現実的なコードを作っていた、または少なくとも私は彼がだと思ったが、私の驚きには何のエラーも投げなかった。しかし、彼は自分が何をしているのか本当に分からなかったので、期待したことをしなかった。 しかし今、私はそれが何をしているのか非常に興味があります。なぜなら、それはエラーを投げない何らかの理由がなければならないからです。javascript関数定義のオブジェクト

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

例外:オブジェクトにデータを追加するとき

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

が、それはエラーがスローされます: 'キャッチされないでSyntaxError:予期しない文字列' そう

コードはこのような何かを見てなぜランダムな議論が許されているのですか?

答えて

3

これはEcmaScript 6 argument destructuringです。あなたのように関数を定義した場合:

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

その後、としてそれを呼び出すことができます。

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

、それはそれぞれの引数ab、および1からc2、および3をバインドします。あなたの例は、変数を含んでいる配列が空である単純な縮退ケースです。

一般的なオブジェクトまたは配列リテラルに式が入る場所は、引数オブジェクト/配列内の対応する要素にバインドされる変数のように、変数名を含む必要があります。このため、2番目のバージョンでエラーが発生しました。"something"は変数名ではなく文字列なので、パターンでは使用できません。

+0

ああ私は、それはかなりクールです。私は今javascriptの構造化(私が聞いたことがない)を見て、if()のために[リンク](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)を残したい他の人も興味があります。 – thegunmaster

関連する問題