2010-10-12 53 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

相关问题