【问题标题】:What's the purpose of starting semi colon at beginning of JavaScript? [duplicate]在 JavaScript 开头使用分号的目的是什么? [复制]
【发布时间】:2011-08-22 09:36:33
【问题描述】:

可能重复:
What does the leading semicolon in JavaScript libraries do?

我注意到很多 jQuery 插件都是以

开头的
;(function(){ /* something in here */ })();

我只是想知道开头的分号是做什么用的,以及末尾的空括号。

【问题讨论】:

标签: javascript jquery


【解决方案1】:

如果您将这个脚本包含在某个“坏”脚本之后,该脚本没有正确地用分号关闭其最后一行,那么分号就在那里。在这种情况下,这两个脚本可能会合并并导致无效代码。例如,如果您将多个脚本合并为一个响应。

最后的()是执行函数。这是创建一个闭包。私有变量和方法可以在这个函数的范围内声明,不能从脚本外部访问。

【讨论】:

  • 这与“糟糕”的脚本无关——它与以无分号的方式书写有关。
  • 恕我直言,这是“坏”脚本。
  • @James Gaunt 我编写了无分号的 Javascript。我还没有找到一个很好的理由 for 使用分号(在这种特殊情况下,一行以( 开头是使用; 来确保前一个语句终止的原因)。通过说“坏”,一个不公平的——尽管很受欢迎——的判断正在通过。如果组合多个脚本文件(或最小化代码)的工具破坏了 Javascript,那么是 工具 有问题,而不是“坏”脚本。
  • @pst - 在此链接中始终使用分号有很多充分的理由:stackoverflow.com/questions/444080/…
  • @pst。很公平。我相信您可以按照自己的风格编写代码。事实上,最佳实践是主观的。您的陈述“一旦知道何时以分号开始一行的规则......”揭示了为什么始终使用分号是最佳实践。因为那时你不需要知道这些额外的规则,并希望其他人都知道。如果我们一直都拥有完美的知识,我们可以用二进制编程,但我们没有。最佳实践可以帮助我们。当然,你是否选择跟随它取决于你。
【解决方案2】:

这个结构:

(function(){ /* something in here */ })()

用于在 Javascript 中创建新的作用域。

More info on function scope here.

关于分号,我以前从未见过。我认为当您连接多个脚本时这是一种安全措施,因为分号在某些情况下在文件末尾是可选的。

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
  • 2011-06-11
  • 2017-09-06
  • 2021-10-09
  • 2010-10-08
  • 1970-01-01
相关资源
最近更新 更多