2017-10-02 5 views
2

ほとんどの場合、Javascriptを使用すると、ステートメントの最後にセミコロンを省略することができます。しかし、興味深いことに、このケースではない:私たちはアノン機能の前の文の終わりに1つのセミコロンを入れない限り、自己匿名関数を実行する前にセミコロンを入れなければならないのはなぜですか?

var x = [5, 'asdf'] 
 

 
(function() { 
 
    window.alert("Yay!") 
 
})()

これは、動作しません。

var x = [5, 'asdf']; 
 

 
(function() { 
 
    window.alert("Yay!") 
 
})()

これで完全に動作します。

ステートメントの最後に暗黙のセミコロンを明示的に適用するルールでは、この場合、この1つのセミコロンは暗黙指定されていないと規定されていますか?

+0

おそらく、それは関数を使って配列を呼び出すと解釈され、その結果はパラメータなしで呼び出されます。あなたは* "はうまくいかない" *に展開できますか? – jonrsharpe

+0

JavaScriptの自動セミコロン挿入の基本的な問題です。あなたの最初のコードサンプルは、JavaScriptがセミコロンを追加する場合ではないので、空白行がない場合と同じです。 – Pointy

+0

@jonrsharpe「このスニペットを実行する」をクリックして、エラーを発出してください。 – gaazkam

答えて

2

Uncaught TypeError: [5,\"asdf\"] is not a function

それはあなたの[5, 'asdf']が関数名であり、あなたはそれがパラメータを渡す実行しようと考えてエラーによります。私たちは、1行にそれらを結合した場合、あなたはそれが機能

[5, 'asdf'](function() { window.alert("Yay!") }) 

として渡されたパラメータで関数呼び出しに似ていることを見ることができるように置くセミコロンは文が終了し、コンパイラに言いますと、次の行は、別の文ですIIFEです。

+0

誰かがなぜこの回答を下落させたのか聞いてもよろしいですか? – gaazkam

関連する問題