1

次の JavaScript コードでは、letを呼び出す;直後にを追加する必要があることに気付きました。$('#myButton').click(function() {})$('.lala').myFunction()

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

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

$('.lala').myFunction()

JSビン

なぜ;ここで大きな違いが生じるのですか?;ほとんどの場合、JavaScript ではステートメント間のステートメントを省略できると思いました。

4

2 に答える 2

6

関数呼び出しは別の関数を返すことができるためです。セミコロンがない場合、IIFE を囲む括弧は、返される.click()可能性のある関数への引数リストであると解釈されるため、次のように記述したかのように扱われます。

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

結果が明確でない場合があるため、自動セミコロン挿入に依存する習慣をやめてください。ステートメントの後に常にセミコロンを付ければ、驚くことはなく、このようなあいまいなケースについて心配する必要もありません。

于 2016-12-23T21:19:49.423 に答える
3

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

それは基本的にこれをやっています:

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

2 番目の関数は失敗します。これは、非常にあいまいなケースを作成する可能性があるため、ステートメントの後に常にセミコロンを付けることが優れた方法である理由の典型的な例の 1 つです。そうしない理由は本当にありません。

于 2016-12-23T21:19:59.777 に答える