[英]Why does the JavaScript need to start with “;”?
我最近注意到Web上的很多JavaScript文件都以a開頭;
緊跟評論部分。
例如, 這個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( $ ){
為什么文件需要以a開頭;
? 我也在服務器端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
是返回時,將被視為試圖初始化函數。
這主要是為了防止在嘗試將多個文件連接到一個文件時出錯:
a.js
function a() {
/* this is my function a */
}
a()
b.js
(function() {
/* This is my closure */
})()
如果我們將這些文件連在一起會導致問題。
所以記得把你的;
在(
也許還有一些其他地方.Btw.var var a = 1;;;var b = 2;;;;;;;;;var c = a+b;
是完全有效的JavaScript
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.