2015-12-01 4 views
0

Почему prevColor всегда undefined?setInterval функция не может использовать внешнюю переменную

Этот код должен регистрировать новый цвет (actualColor) и предыдущий цвет (prevColor). Однако я не могу сохранить в prevColor изнутри функции setInterval. Где ошибка? Я не думаю, что это проблема контекста. Но я не уверен. There's нет this внутри ...

Можете ли вы сказать мне, как я могу сохранить значение actualColor в prevColor внутри функции setInterval?

var actualColor; 
var prevColor; 


// do some user action and change actualColor 


setInterval(function() { 
    // only log the color if it differs from prevColor 
    if (actualColor != prevColor) { 
     console.log("actualColor: " + actualColor + ", prevColor: " + prevColor); 
    } 
    prevColor = actualColor; 
}, 100); 

консоли:

actualColor: acff06, prevColor: undefined 
+0

Возможный дубликат [Как вернуть ответ от асинхронного вызова?] (http://stackoverflow.com/questions/14220321/how-do-return-the -ответ от -асинхронного вызова) – Whymarrh

+0

Где вы устанавливаете 'actualColor'? –

+0

Вы не придаете переменным никакого значения. –

ответ

1

Я думаю, что он должен быть вашим контекстом - я сделал простую веб-страницу со всеми битами, которые у вас есть выше, и это кс штраф -Даже без установки начальных значений на переменные:

simple page+console

Я разместил свой код в теге сценария в голове, и добавил

<input 
    type="text" 
    id="actualColor" 
    /> 
<input 
    type="button" 
    onclick = "actualColor = document.getElementById('actualColor').value;" 
    value = "change colour" /> 

обеспечить способ изменения actualColor в веб-страницу (вместо использования консоли)

+0

Да, это работает! Также для меня сейчас. Спасибо! – wurstbrotrest

0

Вы должны инициализировать значение prevColor, в противном случае первое время это будет undefined

Вобще

var actualColor; 
var prevColor = ""; 


// do some user action and change actualColor 


setInterval(function() { 
    // only log the color if it differs from prevColor 
    if (actualColor != prevColor) { 
     console.log("actualColor: " + actualColor + ", prevColor: " + prevColor); 
    } 
    prevColor = actualColor; 
}, 100); 
+0

Итак, что вы ожидаете от этого кода? –

Смежные вопросы