2010-10-12 52 views
1

基於下面的JavaScript示例,是否有辦法將函數f的引用傳遞給promptForProceed函數,並讓它在promptForProceed中有條件地執行?JavaScript/JQuery - 你可以傳遞一個函數引用然後執行它嗎?

如果f函數使用了一些參數(例如:f(a, b, c) { ... }),您也可以這樣做嗎?

function f() { 
    //Do stuff.. 
} 

function promptForProceed(myFunction) { // <------ PASS FUNCTION AS PARAMETER 
    $("#div-dialog-proceed").dialog({ 
     modal: true, 
     buttons: { 
      "Stay on current page": function() { 
       $(this).dialog("close"); 
      }, 
      "Continue": function() { 
       $(this).dialog("close"); 
       myFunction(); // <--------- CALL FUNCTION 
      } 
     } 
    }); 
} 

更新:我想我喜歡使用匿名函數參數的選項:

promptForProceed(function() { //Do stuff like call f(a,b,c) }); 

回答

3

是的,但你應該不應該命名他們兩個,或者它會混淆正在發生的事情。你叫上f()該行是調用參數,而不是函數f(除非這就是你通過什麼)

要傳遞的參數,通過promptForProceed(myFunction, a, b, c)然後用myFunction(a, b, c)

2
當然可以的

。函數是對象!

+1

函數不是對象,函數通過複製傳遞,對象通過引用傳遞。 – Ally 2012-09-21 11:23:05

+0

@Ally「JavaScript中的每個函數實際上都是一個函數__object__」 - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function – 2012-09-21 17:20:40

+0

很高興知道。謝謝。 – Ally 2012-09-22 00:43:20

2

是的。函數是JavaScript中的第一類對象,可以作爲參數傳遞。

事實上,你的語法是正確的。它應該已經工作:)

+0

如果f帶參數會怎麼樣?你可以將'f(a,b,c)'傳遞給'promptForProceed'函數嗎? – 2010-10-12 18:39:43

+0

@Marcus參數來自哪裏? – NullUserException 2010-10-12 18:41:09

+0

@馬庫斯是的。如果你問我 – 2010-10-12 18:41:11

0
promptForProceed(f, f_parameter) 

致電然後f_parameter傳遞給F( )

+0

@編輯後的版本,Javascript非常直觀:傳遞一個對象數組 – Xaqron 2010-10-12 18:43:39

0

是的,你可以。你有什麼應該工作。傳遞參數也很好。

你也應該看看中的函數調用方法,它允許你設置的範圍

myFunction.call(object); 

的適用方法允許你傳遞參數的數組。

myFunction.apply([param1, param2]); 

此外,您應該瞭解'閉包'以及範圍如何在傳遞函數時如何工作。 http://en.wikipedia.org/wiki/Closure_(computer_science)#JavaScript

相關問題