在JavaScript开始时启动半冒号的目的是什么?

ben*_*mer 101 javascript jquery

可能重复:
JavaScript库中的前导分号有什么作用?

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

;(function(){ /* something in here */ })();
Run Code Online (Sandbox Code Playgroud)

我只是想知道开始的分号是什么,以及最后的空括号.

Jam*_*unt 140

如果您在一些"坏"脚本之后包含此脚本,并且没有使用分号正确关闭其最后一行,则会出现分号.在这种情况下,可能会将两个脚本组合在一起并导致代码无效.例如,如果要将多个脚本合并为单个响应.

最后的()正在执行该功能.这创造了一个封闭.私有变量和方法可以在此函数的范围内声明,无法从脚本外部访问.

  • 恕我直言,这是"坏"脚本. (91认同)
  • @James Gaunt我写了不含分号的Javascript.我还没有找到一个很好的理由*for*使用分号(这种特殊情况,其中一行开头是`(`是一个使用`;`来确保前一个语句被终止的原因).通过说"坏"一个不公平 - 虽然很受欢迎 - 判决正在通过.如果组合多个脚本文件(或最小化代码)的工具破坏Javascript,那么它是*工具*有错并且不是"坏"脚本. (6认同)
  • 这与"坏"脚本无关 - 它与以半分号自由风格编写有关. (5认同)
  • @pst - 在这个链接中总是使用分号有很多很好的理由:http://stackoverflow.com/questions/444080/do-you-recommend-using-semicolons-after-every-statement-in-javascript #444084 (5认同)
  • @太平洋标准时间.很公平.我相信你的风格可以很好.确实,最佳做法是主观的.你的陈述'一旦知道什么时候开始用分号开始行......'暴露了为什么总是使用分号是最好的做法.因为那时你不需要知道这些额外的规则,并希望其他人都这样做.如果我们都有完美的知识,我们可以用二进制编程,但我们没有.最好的做法是帮助我们.当然,这取决于您是否选择遵循它. (4认同)
  • @James Gaunt我拒绝"知道"在一行开头添加一个`;`以`(`添加*比任何已知的其他规则更复杂*.事实上,我会说它是"更难"记住*这个错误的代码*带有分号*:`return \n value;`因此,分号*没有做任何*来保存一个不懂JavaScript语言的人.教学初学者和/或加强在每一行的末尾以某种方式"需要"(对于"好的"代码),分号会让我感到愚蠢.但那只是我:) (2认同)

sla*_*ppy 9

这个结构:

(function(){ /* something in here */ })()
Run Code Online (Sandbox Code Playgroud)

用于在Javascript中创建新范围.

更多关于功能范围的信息.

关于分号,我以前从未见过它.我认为这是连接多个脚本时的安全性,因为在某些情况下,分号在文件末尾是可选的.