2012-12-04 27 views
1

我對JavaScript很陌生,所以如果這個答案顯而易見,或者我吠叫錯誤的樹,我很抱歉!以兩種不同的方式調用函數 - JavaScript

什麼是在下面的代碼片段的區別:

function primeAddNum(innerHTML) { 
    return function() { 
     addNum(innerHTML); 
     return false; 
    }; 
} 
var func = primeAddNum(innerHTML); 

第二個:

var func = function() { 
     return function() { 
      addNum(innerHTML); 
      return false; 
     }; 
}(); 

頂一個工作的方式我想它,但不是底部,但這對我來說不是非常重要。我想知道的是每塊背後的邏輯,因爲我看不出它們的區別。

+0

我知道這不是問題,但具有匿名函數返回另一個匿名函數是非常亂倫的。 – thatidiotguy

回答

2

與第二塊的問題是,innerHTML是不確定的存在,因爲你不及格了。他們將成爲等效,如果你改變它:

var func = function(innerHTML) { 
    return function() { 
     addNum(innerHTML); 
     return false; 
    }; 
}(innerHTML); 
+0

謝謝,現在它變得更有意義。不能相信我現在已經看到了答案,因此我一直在爲這件事而拉扯頭髮。 – FunnyOxymoron

+0

還要考慮Esailija的說法:具有自調用功能的第二種風格僅供一次使用。如果不重複整個事情,你不能創建新的功能。因此,如果您打算重新使用'primeAddNum',請使用第一個版本。 – bfavaretto

+0

如果它確實是'undefined',那麼它不會使它變成un-'undefined',而只是捕獲'innerHTML'而不是依賴外部引用。這當然是好的,但取決於代碼沒有必要。 – Esailija

-1

沒有什麼區別,你可以沒有任何問題

1

很好用的第二個同時使用,只能創建一個func一次。但隨着第一個,你可以創造出許多:

var func1 = primeAddNum(innerHTML); 
var func2 = primeAddNum(someOtherInnerHTML); 
相關問題