为什么这里需要分号?

时间:2016-12-23 21:17:17

标签: 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()

JSBin

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

2 个答案:

答案 0 :(得分:6)

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

.click()

完全不再依赖于自动分号插入的习惯,因为结果有时并不明显。如果你总是在你的陈述之后加上分号,你就不会有惊喜,也不必担心像这样的模糊案例。

答案 1 :(得分:3)

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

它基本上是这样做的:

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

第二个功能将失败。这是为什么在你的陈述后总是加分号的优秀做法的经典例子之一,因为它可能会造成非常模糊的情况。没有理由不这样做。