Javascript函数作为循环中的变量

时间:2014-02-21 12:25:50

标签: javascript function for-loop conditional-execution

请你帮我一个功能循环:

我有7个功能:

function menu1(){};
function menu3(){};
function menu4(){};
function menu5(){};
function menu6(){};
function menu7(){};

我需要做的是加载函数menux(){} 我的意思是从循环中得到x == 3加载函数menu3()。

for(x=1;x=8;=x++)
{
    function menux(){};
}

3 个答案:

答案 0 :(得分:1)

您可以将函数包装到对象中:

function menu1(){};
function menu3(){};
function menu4(){};
function menu5(){};
function menu6(){};
function menu7(){};

var wrap={
    menu1:menu1;
    menu3:menu3;
    menu4:menu4;
    menu5:menu5;
    menu6:menu6;
    menu7:menu7;
}

然后,您可以将其纳入for:

for(x=1;x=8;=x++)
{
  if(!wrap["menu"+i]) wrap["menu"+i]();
}

有很多方法可以做到这一点,你也可以这样做:

function menu(int num){
 switch(num)
  {
   case 1:
    menu1();
    break;
   case 2:
    menu2();
    break;

   //....
  }
}

我希望它有所帮助。

答案 1 :(得分:0)

您应该解释一下您的情况以及您希望从更大的角度实现的目标。这似乎已经是一种次优的方法。但是,好的,你走了:

for(var x=1; x<8; x++)
{
    window['menu' + x]();
}

假设您的函数声明在全局命名空间中,此循环将调用从menu1menu7的所有函数。

答案 2 :(得分:0)

你应该问自己 - 如果有不同的方式。当然是这样!

  1. 我建议你创建一个接受参数的函数,并根据它做一些事情: function menu(x) {...}

  2. 如果您没有第一个选项,我建议您使用以下方法实现一个对象: var methods = { menu1: function() {}, menu2: function() {}, menu3: function() {}, ... }

  3. 使用eval。在这种情况下请不要这样做。 Eval很强大,但在这种情况下,这是一种过度杀伤。