为什么这里需要分号?

1 javascript syntax automatic-semicolon-insertion

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

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

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

$('.lala').myFunction()
Run Code Online (Sandbox Code Playgroud)

JSBin

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

Bar*_*mar 6

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

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

只是摆脱了依赖自动分号插入的习惯,因为结果有时并不明显.如果你总是在你的陈述之后加上分号,那么你不会感到惊讶,也不必担心像这样的模糊案例.