为什么这里需要分号?

问题描述 投票:1回答:2

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

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

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

$('.lala').myFunction()

JSBin

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

javascript syntax automatic-semicolon-insertion
2个回答
6
投票

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

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

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


3
投票

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

它基本上是这样做的:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.