Я предполагаю, что переменная window.RR
обновляется с интервалом.Это означает, что переменная обновляется асинхронно.
Например, допустим, что window.RR
содержит временную метку (в миллисекундах) сервера, а код ниже обновляет window.RR
каждую миллисекунду.
setInterval(function () {
window.RR += 1;
}, 1);
Если вы затем запустите цикл, выполнение которого может занять более 1 мс
var c = window.RR;
for (var i = 0; i < 999999999999999; i++){
if (c != window.RR) { // This is always false
console.log('This will never be printed');
}
}
window.RR
не изменится во время выполнения цикла, потому что javascript асинхронныйкоды не работают параллельно.
Таким образом, если выполнение цикла занимает более 1 мсек window.RR
обновление кода произойдет после завершения цикла (ему придется ждать, пока любой другой код, запущенный до завершения, не завершится).этот код может быть выполнен).
Дополнительная информация:
Этот код не позволяет выполнять какой-либо другой код во время выполнения цикла for.
var c = window.RR;
for (var i = 0; i < 999999999999999; i++){
if (c != window.RR) { // This is always false
console.log('This will never be printed');
}
}
Чтобы разрешить другой кодчтобы запустить, вы должны сделать каждый цикл асинхронным.
var c = window.RR;
var loop = function(i) {
if (i < 999999999999999) {
i++;
if (c != window.RR) {
console.log('This will be printed!');
}
else {
// Allow other javascript codes to run
// So that the window.RR can be updated
setTimeout(function () {loop(i);}, 0);
}
}
};
loop(0);