簡體   English   中英

為什么JavaScript需要以“;”開頭?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM