Pregunta sobre bucle en javascript

Probé este bucle, pero no funciona (errores de sintaxis). ¿Cuál es la forma correcta de hacerlo? up + i no funciona, por ejemplo.

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

preguntado el 16 de mayo de 11 a las 17:05

¿Qué es? up+i ¿se supone que es? -

up0, up1, up2, etc.

up+i = function() no es Javascript válido, por eso aparece un error de sintaxis -

@ Siento que eso realmente no va a funcionar. ¿Ha considerado usar una matriz en su lugar? p.ej: up[i] = ... -

Ah. No puedes hacer up+i, pero puedes hacer window['up' + i]. Aunque no lo recomiendo

7 Respuestas

El problema principal gira en torno a esta línea.

up+i = function() {

La expresion up+i produce un valor, no una variable, y un lugar al que se puede asignar. ¿Estabas intentando, en cambio, asignarlo a una matriz? Si es así, cámbielo a lo siguiente

up[i] = function() {

EDITAR

OP aclaró que la intención es crear 10 funciones con nombre. En ese caso, debe haber un objeto del que colgarlos. Lo llamaré root por ejemplo.

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

Además, en este momento, la función captura un solo i lo que significa que todas las instancias de la función tendrán el mismo valor para i. Para evitar esto, use una función separada para capturar el valor.

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

contestado el 16 de mayo de 11 a las 21:05

Esto no es correcto, vea el segundo comentario sobre lo que estaba tratando de hacer. Estaba tratando de hacer 10 funciones, no una matriz de 10 funciones. - Nick Berardi

@Nick, cuando se agregan aclaraciones a las preguntas después del hecho, es mucho mejor comentar para notificar a las personas y luego votar en contra, no inmediatamente - JaredPar

@jared, el comentario que le publiqué a Nick también se aplica a tu sugerencia. - anvd

@Siente lo que pretendías $t ¿referirse? Es difícil ayudar a menos que sepamos la intención de ese valor: JaredPar

si uso $ t + ii obtengo el error, pero esto. $ t0, $ t1, $ t2 funcionan bien. Probablemente la mejor opción son fragmentos de código separados ... gracias de todos modos. - anvd

El código responsable del bucle funciona. Solo mira aquí: http://jsfiddle.net/7aZLv/ (¡Advertencia! abre 10 cuadros de alerta uno tras otro)

EDIT:

Puede crear funciones globales como esa: http://jsfiddle.net/7aZLv/1/

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

up3(); // will make alert appear

El error ocurrió porque su expresión de asignación era incorrecta (asignó un valor a expresiónno es un variable cómo debe asignarse).

contestado el 16 de mayo de 11 a las 21:05

Tal vez debería ser

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

? Necesitamos mucha información para ayudarlo, ¿qué se supone que es, qué está tratando de lograr? ¿Qué errores de sintaxis está recibiendo?

contestado el 16 de mayo de 11 a las 21:05

Quiere que genere up1, up2, up3, up4, etc.- Nick Berardi

No puede tener una expresión en el lado izquierdo de una tarea. es up+i se supone que es aritmética de punteros? si es así, no hay punteros en javascript. No puedo decir lo que está tratando de hacer, pero lo primero que debe hacer es cambiar up+i = function() { ...} a up = function() {...} o bien obtenga una nueva variable para asignarla también.

contestado el 16 de mayo de 11 a las 21:05

Muchos errores en tu código.

arriba es cuerda? $ t ¿Qué es esto?

tal vez así?

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

contestado el 16 de mayo de 11 a las 21:05

En lugar de intentar crear variables individuales para las funciones, puede agregarlas a una matriz.

var ups;

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

contestado el 16 de mayo de 11 a las 21:05

prueba este

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

Esto agregará las funciones al window objeto para que pueda realizar llamadas como esta después de él:

up0();
up1();
// etc

contestado el 16 de mayo de 11 a las 21:05

ReferenceError: $ t no está definido. Pero si uso $ t1 directamente, el error desaparece. - anvd

No sé que es tu sintaxis. - Nick Berardi

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.