Какой эффективный способ получить первое обновленное значение в моем случае? - PullRequest
0 голосов
/ 11 апреля 2011

У меня есть следующий фрагмент кода js,

var myloop=function(element){
  ...
  var myValue;

  element.onClick(){
      //GET the first value of variable "myValue"
  };
};
myloop.start();

При запуске myloop тело функции myloop будет выполнено serverl times и localпеременная myValue будет обновляться при каждом запуске myloop.

Внутри myloop функции, у меня есть обработчик событий element.onClick(), этот обработчик событий заинтересован только в первом обновленном значении локальной переменной myValue,

Я хотел бы попросить предложение о наиболее эффективном способе , чтобы получить первое обновленное значение "myValue" внутри обработчика.

Моя реализация состоит в том, чтобы определить index и Array вне функции myloop и сохранить все обновленные значения в массиве, затем в обработчике я получаю первый элемент из массива, которыйпервое обновленное значение «myValue».Но я не думаю, что это эффективно, так как остальные обновленные значения в массиве бесполезны.

Итак, любой может дать другое предложение, чтобы получить первое обновленное значение myValue внутри обработчика.

1 Ответ

1 голос
/ 11 апреля 2011

myValue определено в области действия myLoop, и когда вы находитесь внутри onclick элемента, вы будете ссылаться на пространство в памяти этой переменной, а не на копию.

Итак, вам нужно создать новую область видимости, чтобы сохранить эту ссылку. Это не создаст копию, но, поскольку эта область не будет обновлена ​​новым значением, она все равно будет ссылаться на старое.

Основано на ответе @ andy-e на JavaScript для странности индекса цикла :

var myloop=function(element){
    ...
    var myValue;

    (function (myValue) {
        element.onclick = function () {
            //GET the first value of variable "myValue"
        }
    })(myValue);
}

Это, ИМХО, «правильный» способ решить эту проблему. Возможно, более эффективный способ сделать это - объявить глобальную переменную с именем что-то вроде firstValue, а когда вы устанавливаете myValue (вы можете сделать установщик, если измените его, является открытым свойством), проверьте, если firstValue равно null , В этом случае вы заменяете значение, в любом случае, ничего не делаете.

Удачи!

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