Javascript:可以通过变量将函数命令传递给另一个函数吗?

时间:2012-02-20 22:31:27

标签: javascript function

好的,希望这是正确的。我正在构建一个通用的javascript函数,它将构建一个菜单,然后构建每个菜单项将调用的函数。为此,我需要传递一个要为每个选项调用的命令列表。

例如:

var thecall = 'alert("hi, this works");';

function myfunction(thecall)
{
  //In here I want to excute whatever commands is listed in variable thecall
 .....
}

我确信这样做是完全愚蠢的,但我不知道怎么做。

基本上,我需要我的函数在变量的基础上执行其他函数。

谢谢!

3 个答案:

答案 0 :(得分:6)

我告诉你如何使用它,我觉得有点发展。

var thecall = function(name){alert("hi " + name + ", this works");};

function myFunction(function_ref)
{
  function_ref('Mark');
}

myFunction(thecall);

答案 1 :(得分:1)

您可以使用eval()执行任意JavaScript链接,但这不是您的最佳解决方案(它几乎不是最佳解决方案)。

JavaScript中的函数本身就是对象,这意味着您可以在多个变量中存储对同一函数的多个引用,或者将函数引用作为参数传递等。所以:

var thecall = function() {
   alert("hi, this works");
};

function myfunction(someFunc)  {
   someFunc();    // call the function that was passed
}

myfunction(thecall);   // pass reference to thecall

请注意,在将引用传递给thecall函数时,没有括号,即您说thecall而不是thecall():如果您说myfunction(thecall())会立即调用thecall并将其返回的内容传递给myfunction。如果没有括号,则会传递对thecall的引用,然后可以在myfunction内执行该引用。

在您谈论菜单项列表的情况下,每个项目应调用特定功能,您可以执行以下操作:

var menuItems = [];
function addMenuItem(menuText, menuFunction) {
   menuItems.push({ "menuText" : menuText, "menuFunction" : menuFunction });
}

function test1() {
   // do something
}

addMenuItem("Test 1", test1);
addMenuItem("Test 2", function() { alert("Menu 2"); });

// and to actually call the function associated with a menu item:
menuItems[1].menuFunction();

请注意,我正在添加的第二个菜单项在将其作为参数传递给addMenuItem()的位置定义了匿名函数。

(显然这是一个过于简单的例子,但我希望你能看到它对你真正的要求有用。)

答案 2 :(得分:0)

我认为您正在寻找eval功能。

var code= 'alert("hi, this works");';
eval(code);