2016-12-23 10 views
1

私は以下のJavaScriptコードで;$('#myButton').click(function() {})の直後に追加して$('.lala').myFunction()を呼び出さなければならないことを認識しています。なぜセミコロンが必要なのですか?

$('#myButton').click(function() {}) 

(function ($) { 
    $.fn.myFunction = function (opt) { 
     alert("inside myFunction") 
    } 
})(jQuery); 

$('.lala').myFunction() 

JSBin

;は、ここに大きな違いを作るのはなぜ?私はほとんどの場合、JavaScript内で;文を省略することができると思った。

+2

そうでなければ、最初のステートメントはIIFEのように解釈されるからです。 – Ioan

答えて

6

関数呼び出しは別の関数を返す可能性があるためです。セミコロンがなければ、生命維持の周りの括弧は.click()が返される可能性がありますことを関数の引数リストであると解釈されているので、あなたが書いたかのように扱われます:

$('#myButton').click(function() {})(function ($) { 
    $.fn.myFunction = function (opt) { 
     alert("inside myFunction") 
    } 
})(jQuery); 

ちょうどに応じての習慣から抜け出しますセミコロンの自動挿入は結果が明白でない場合があるためです。ステートメントの後にセミコロンを置くと、驚きはなく、このような不明瞭なケースについては心配する必要はありません。

3

セミコロンがないと、インタープリタは、2番目の関数をfirsの引数として渡して、最初の関数呼び出しの結果を関数として呼び出そうとしていると考えています。

基本的にこれをやっている:

$('#myButton').click(function() { 
    //... 
}(function() { 
    //... 
})(jQuery); 

第二の機能は失敗します。これは非常に曖昧なケースを作成する可能性があるので、なぜあなたのステートメントの後にセミコロンを置くのがよいのかという古典的な例の1つです。本当にない理由はありません。

関連する問題