Closure 在字典上的意思有:
我們注意到了最後一項應用於數理方面的說明:閉包。很怪的中文,不過在網頁中,很早就出現,也就是 HTML 標籤中的 </>,部份 HTML 標籤需要有成對的"結束標籤",例如 <p>...</p>。這叫作 Closing Tag 或 Tag closure。
雖然大多數情況下,該寫 Closing Tag 的標籤,不寫也能"正常"顯示 (拜 M$ IE 4/5/6.....? 之賜,給設計師無限的偷懶空間及方便),不過,愈來愈進化的各式網頁工具,對語法結構的要求會愈來愈嚴格,如果不是太麻煩,建議你該 Closing 的就 Closing。
而在所謂現代 Javascript 陳述式中,也加入了 Closure (歸屬於 Javascript 1.8),稱之為 Expression Closure (閉包陳述? 太怪了,還是講原文好了),看個例子:
// 傳統寫法 function sum(x){ return (1+x)*x/2; } document.write (sum(10)); // Expression Closure document.write ((function(x)(1+x)*x/2)(10));
看懂嗎,整個變化是這樣子的:
function sum(x){return (1+x)*x/2;} sum(10); //變化成以下 var sum=function(x){return (1+x)*x/2;} sum(10); //變化成以下 // 把第 4 行的 sum = 後方的所有內容,置換第 5 行的 sum function(x){return (1+x)*x/2;}(10); // (10) 前的所有陳述是一體的,就像先加減後乖除一樣,如果必需強調要先處理,則必需用 () 抱含 (function(x){return (1+x)*x/2;})(10); // 因為 function(x) 直接透過一行運算就得到結果,並回傳,所以,連 {} 及 return 都省了 (function(x)(1+x)*x/2)(10);
看起來很面熟嗎?這就是 Javascript 1.8 導入的 Expression Closure,至於為什麼要這麼作呢? MDC (Mozilla 研發中心) 官網上是這麼說的
This addition is nothing more than a shorthand for writing simple functions, giving the language something similar to a typical Lambda notation
除了縮短語法,暫時還看不出有什麼好處。最後提醒,這屬於現代瀏覽器語法,目前不是所有瀏覽器都支援這種語法結構
同意轉載,不過麻煩看一下轉載需知