Вопрос о цикле в JavaScript - PullRequest
0 голосов
/ 16 мая 2011

Я пробовал этот цикл, но не работает (ошибки синтаксиса). Как правильно это сделать? вверх + я не работаю, например.

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

Ответы [ 7 ]

3 голосов
/ 16 мая 2011

Основная проблема находится вокруг этой линии

up+i = function() {

Выражение up+i создает значение, а не переменную, и место, которое может быть назначено. Вместо этого вы пытались присвоить массив? Если это так, измените его на следующий

up[i] = function() {

EDIT

ОП уточнил, что целью является создание 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 голос
/ 16 мая 2011

Код, отвечающий за циклические работы.Просто посмотрите здесь: 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

Ошибка произошла из-за неправильного выражения выражения (вы присвоили значение выражение , а не переменная способ его назначения).

0 голосов
/ 16 мая 2011

попробуйте

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

Это добавит функции к объекту window, чтобы после него можно было выполнять такие вызовы:

up0();
up1();
// etc
0 голосов
/ 16 мая 2011

Вместо того, чтобы пытаться создать отдельные переменные для функций, вы можете добавить их в массив.

var ups;

for(i=0;i<10;i++) {
    ups.push(function() {
        base.refresh("Field"+i, $t+i);
    });
}
0 голосов
/ 16 мая 2011

Много ошибок в вашем коде.

up is string?$ t что это?

может быть так?

for(i=0;i<10;i++) {
var new_func = 'up' + i;
        new_func = function() {
            base.refresh("Field"+i, $t+i);
        }
    }
0 голосов
/ 16 мая 2011

Вы не можете иметь выражение в левой части назначения.up+i должен быть арифметикой указателя?если это так, в javascript нет указателей.я не могу сказать, что вы пытаетесь сделать, но первое, что нужно сделать, это изменить up+i = function() { ...} на up = function() {...} или получить новую переменную, чтобы присвоить ее тоже.

0 голосов
/ 16 мая 2011

Может быть, это должно быть просто

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

? Нам нужно много информации, чтобы помочь вам, что должно быть, чего вы пытаетесь достичь? Какие синтаксические ошибки вы получаете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...