关于javascript循环的问题

时间:2011-05-16 17:26:13

标签: javascript loops

我试过这个循环,但是没有工作(语法错误)。 这样做的正确方法是什么? up + i不起作用。

  for(i=0;i<10;i++) {
            up+i = function() {
                base.refresh("Field"+i, $t+i);
            }
        }

7 个答案:

答案 0 :(得分:3)

主要问题是围绕这一行

up+i = function() {

表达式up+i生成一个值,而不是一个变量,以及一个可以赋值的位置。您是否尝试将其分配到数组中?如果是这样,请将其更改为以下

up[i] = function() {

修改

OP澄清说,目的是创建10个命名函数。在这种情况下,需要有一个对象将它们挂起。我将其称为root用于示例

var root = {};
for (i = 0; i < 10; i++) {
  root['up' + i] = function() { 
    base.refresh("Field"+i, $t+i);
  };
}

此外,此功能正在捕获单个i,这意味着该函数的所有实例将具有i的相同值。为了防止这种情况,请使用单独的函数来捕获值。

var root = {};
for (i = 0; i < 10; i++) {
  root['up' + i] = function(arg) { 
    return function() { base.refresh("Field"+arg, $t+arg); };
  } (i);
}

答案 1 :(得分:1)

负责循环的代码工作。请看这里:http://jsfiddle.net/7aZLv/(警告!一个接一个地打开10个警告框)

修改

您可以创建这样的全局函数:http://jsfiddle.net/7aZLv/1/

for(i=0;i<10;i++) {
    window['up'+i] = function(){
        alert('test');
    }
}

up3(); // will make alert appear

发生错误是因为您的赋值表达式不正确(您为表达式指定了值,而不是变量应该如何指定它)。

答案 2 :(得分:0)

也许应该只是

for(i=0;i<10;i++) {
        up = function() {
            base.refresh("Field"+i, $t+i);
        }
    }

?我们需要大量的信息来帮助你,应该是什么,你想要完成什么?你得到了什么语法错误?

答案 3 :(得分:0)

您不能在作业的左侧有表达式。是up+i应该是指针算术吗?如果是这样,javascript中没有指针。我不知道你要做什么,但要做的第一件事就是将up+i = function() { ...}更改为up = function() {...},否则也会获得一个新变量来分配它。

答案 4 :(得分:0)

代码中有很多错误。

  

向上   是字符串?   $ T   这是什么?

也许是这样的?

for(i=0;i<10;i++) {
var new_func = 'up' + i;
        new_func = function() {
            base.refresh("Field"+i, $t+i);
        }
    }

答案 5 :(得分:0)

您可以将它们添加到数组中,而不是尝试为函数创建单个变量。

var ups;

for(i=0;i<10;i++) {
    ups.push(function() {
        base.refresh("Field"+i, $t+i);
    });
}

答案 6 :(得分:0)

试试这个

for(i=0;i<10;i++) {
   window["up" +i] = function() {
      base.refresh("Field"+i, $t+i);
   }
}

这会将函数添加到window对象中,以便您可以在此之后进行如下调用:

up0();
up1();
// etc