为什么 JavaScript 需要以 “;” 开头?

我最近注意到,Web上的许多JavaScript文件都以紧跟在评论部分之后开始。;

例如,这个jQuery插件的代码以以下开头:

/**
 * jQuery.ScrollTo
 * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 9/11/2008                                      
 .... skipping several lines for brevity...
 *
 * @desc Scroll on both axes, to different values
 * @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } );
 */
;(function( $ ){

为什么文件需要以 ?我在服务器端JavaScript文件中也看到了这个约定。;

这样做的优点和缺点是什么?


答案 1

我想说的是,由于脚本经常被串联和缩小/压缩/发送在一起,所以最后一个人有可能有这样的东西:

return {
   'var':'value'
}

在最后一个脚本的末尾,末尾没有 a。如果您在开始时有一个,它是安全的,例如:;;

return {
   'var':'value'
}
;(function( $ ){ //Safe (still, screw you, last guy!)

return {
   'var':'value'
}
(function( $ ){ //Oh crap, closure open, kaboom!

return {
   'var':'value'
};
;(function( $ ){ //Extra ;, still safe, no harm

答案 2

我相信(虽然我不确定,所以请不要扑向我)这将确保来自不同文件的任何先前声明都已关闭。在最坏的情况下,这将是一个空语句,但在最好的情况下,当未完成的语句实际上来自上面时,它可以避免尝试跟踪此文件中的错误。