Что не так с вашим подходом? Просто установите свои переменные вне функции, которая повторяется, а затем JSON закодируйте ее .
var numbers = [];
var jsonString = "";
function EveryOneSec() {
numbers.push(Math.random());
jsonString = JSON.stringify({'numbers': numbers});
setTimeout(EveryOneSec, 1000);
}
Тем не менее, я думаю, что ваша задача может быть отличной возможностью использовать пользовательское событие ! Вы пометили свой вопрос jQuery, поэтому вам следует проверить его метод bind () . Конечно, по этой теме существует множество учебных пособий .
var numbers = [];
var aPlaceholder = document.createElement("div");
aPlaceholder.bind("arrayUpdatedEvent", {'numbers': numbers}, arrayUpdatedHandler);
function arrayUpdatedHandler(event) {
var jsonString = JSON.stringify(event.data);
// do something with your JSON
}
function EveryOneSec() {
// add number to array
numbers.push(Math.random());
// trigger custom event
aPlaceholder.trigger("arrayUpdatedEvent");
}
// call every 1 second, store in var to be able to cancel it later
var myInterval = setInterval(EveryOneSec, 1000);
Как видите, здесь гораздо больше кода. Однако введение пользовательского события дает вам много возможностей, так как теперь вы отсоединили обновление переменной от создания JSON. Кроме того, вы можете добавить дополнительных прослушивателей, возможно, для регистрации обновленного массива и добавления дополнительных шагов между обновлением массива и созданием JSON. Например, EveryOneSec()
может вызвать другое событие, verifyArrayEvent
, и только если массив проверяет, он запускает arrayUpdatedEvent
.
Обновление: Из комментариев к вопросу похоже, что Озаки не ясно, что они могут получить доступ к ранее определенной переменной в своей функции таймера. Определяя переменную вне функции, а затем ссылаясь на нее внутри функции без использования var , которая создаст новую локальную переменную, вы создаете замыкание , где вы делаете переменная внутри функции будет доступна за ее пределами. Как вы, наверное, заметили, я использовал эту технику в обоих своих примерах.
Надеюсь, это поможет.