为什么这里需要分号?

Why a semicolon is necessary here?

我在下面的JavaScript代码中意识到,我们需要在$('#myButton').click(function() {})之后添加一个;来让$('.lala').myFunction()被调用。

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

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

$('.lala').myFunction()

JSBin

为什么 ; 在这里有很大的不同?我认为在大多数情况下 ; 之间的语句可以在 JavaScript.

中省略

因为一个函数调用可以return另一个函数。如果没有分号,IIFE 周围的括号将被解释为 .click() 可能 return 的函数的参数列表,因此它被视为您编写的:

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

只是改掉依赖自动分号插入的习惯,因为结果有时并不明显。如果您总是在语句后加上分号,您就不会感到惊讶,也不必担心像这样晦涩难懂的情况。

这里没有分号导致解释器认为您正在尝试将第二个函数作为第一个函数的参数传递,然后尝试将第一个函数调用的结果作为函数调用。

基本上是这样做的:

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

第二个函数将失败。这是一个经典示例,说明为什么始终在语句后放置分号是一种很好的做法,因为它会产生非常模糊的情况。真的没有理由不这样做。