2012-02-03 99 views
2

在JavaScript中有很多不同的方法來設置一個方法,如按鈕點擊事件。在JavaScript中匿名方法的優點和缺點是什麼?

例如說你retreived輸入元件「按鈕」

function MyForm(){ 
    //anonymous method 
    button.click = function(){ //work }; 


    //private method 
    var handleClick = function() { // work }; 
    button.click = handleClick; 

    //public method 
    button.click = outerClickHandle; 


} 

//public 
function outerClickHandle(){ 
    // work 
} 

//prototype 
MyForm.prototype.outerClickProto(){ 
    //work 
} 

當然一些更明顯的答案如封裝的期望當存在。並且,對於原型而言,每次都不需要重新創建該功能,這對性能有好處,但對於匿名方法而言,除了作爲一種好方法或寫腳本的流程之外,什麼是好的和壞的?

回答

2

我發現的主要優點是,因爲它是內聯的,所以匿名函數可以訪問範圍內的所有當前局部變量,這在某些情況下可以極大地簡化代碼。一個典型的例子是setTimeout()您希望它使用上面範圍中定義的變量進行操作。

當然,匿名函數也不會干擾你所在的任何名稱空間(全局的,局部的函數等等),因爲它不需要名字。

與addEventListener(type,fn)事件處理函數一起使用匿名函數的一個缺點是,您不能僅刪除該事件偵聽器,因爲您沒有該函數的句柄。

+0

關於命名空間的一個非常好的觀點,我會牢記前進。 – tam 2012-02-03 05:09:30

+1

匿名函數的另一個缺點是每次使用它的代碼運行時都會創建一個新函數,在某些情況下它根本沒有任何區別,但在其他情況下可能需要考慮性能方面的原因(例如,如果執行某些操作在一個循環中)。 – nnnnnn 2012-02-03 06:42:08

+1

我會建議上面的答案被編輯,包括nnnnnn的提交,因爲功能和相關閉包消耗的內存可以變得顯着。匿名和私有方法分別爲一個對象和一個共享執行環境(閉包)模式化。公共方法不創建函數對象,它使用爲公共函數創建的函數對象。如果您打電話給MyForm一次,您將看不到差異,將其稱爲10,000次,您肯定會這樣做。 – chuckj 2012-02-03 07:54:39

相關問題