为什么JavaScript的需要开始使用“;”?
-
21-09-2019 - |
题
我最近注意到,在网络上有很多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文件此约定为好。
有什么优点和这样做的缺点是什么?
解决方案
我会说,因为脚本通常串联和精缩/压缩/发送一起有一个机会,最近这家伙有这样的事情:
return {
'var':'value'
}
在最后脚本而对端的;
结束。如果你有关于你一开始就;
,它是安全的,例如:
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
其他提示
我相信(虽然我不能肯定,所以请不要对我猛扑),这将确保任何事先声明,从不同的文件被关闭。在最坏的情况下,这将是一个空语句,但在最好的情况下也可避免试图追踪到错误在这个文件时,未完成的声明实际上是从上方传来。
考虑这个例子:
function a() {
/* this is my function a */
}
a()
(function() {
/* This is my closure */
})()
会发生什么事是,这将像这样进行评估:
function a() {
/* this is my function a */
}
a()(function() {})()
所以什么都a
正在恢复将被作为一个试图进行初始化函数处理。
这是主要是为了防止错误试图乘文件Concat的到一个文件中时:
<强> a.js 强>
function a() {
/* this is my function a */
}
a()
<强> b.js 强>
(function() {
/* This is my closure */
})()
如果我们Concat的这些文件放在一起会引起问题。
因此,因此要记得把你的;
在(
面前,也许还有其他一些地方。顺便说一句。 var a = 1;;;var b = 2;;;;;;;;;var c = a+b;
是完全有效的JavaScript
不隶属于 StackOverflow