2011-07-06 22 views

回答

1

你的意思是像下面?:

這基本上確保了任何「VAR」聲明保密(他們範圍限制在他們被放置匿名函數),而不是全球性的。例如,考慮:

var counter = 0; 
window['inc'] = function() { 
    return counter++; 
}; 

(function() { 
    var counter = 0; 
    window['inc'] = function() { 
     return counter++; 
    }; 
})(); 

這些都具有定義一個函數window.inc返回一個計數器,獲得遞增的效果;但是,在第一個版本中,counter實際上對所有其他模塊都可見,因爲它位於全局範圍內,而後者確保只有window.inc才能訪問counter

請注意,代碼創建一個函數並立即調用它(這是最後一個parens的用途)。

1

非官方名稱是一個'直接函數' - 基本思想是該函數被定義並即時調用。

這裏有一個簡單的例子:

http://javascriptmountain.com/2011/06/functions/immediate-functions-in-javascript-the-basics/

括號實際上是沒有必要的,除非該函數的返回值賦值給變量,但它們通常用於可讀性。

它在jQuery插件之類的情況下完成的原因是它爲執行代碼提供了一種「沙盒」。假設我們做了以下內容:

(function($) { 
    // augment $ with methods 
}(jQuery)); 

此定義一個函數,它在一個參數,然後立即調用該函數,通過在全球jQuery對象。在直接函數中聲明和使用的任何變量都將在本地作用於該函數,並且不會干擾全局作用域或破壞可能已在其他正在使用的JavaScript代碼片段中聲明的全局變量(對於旨在用於與大量的其他代碼一起使用)。但是,由於我們在調用函數時傳遞了全局jquery對象,我們仍然可以將方法和屬性添加到函數內部的'$'參數,該函數將在函數完成後掛在jquery對象上。

希望這會有所幫助!

相關問題