我想使用Chrome或Firefox开发人员工具在网站上执行代码。 当我孤独地执行“ window.RR”变量时,它向我显示正确的值(它是站点服务器时间(以毫秒为单位)的量度,每次执行时,它都会给我一个不同的值)。当我在循环中使用它(变量c)时,该变量在所有循环中都是常数,它等于第一个循环的值。
我的代码是:
var i;
b=window.RR;
for (i=0 ; i<400000 ; i++) {
c=window.RR;
if (c!==b) {
alert(c)
}
}
我希望在循环中使用它时会收到正确的值,如何实现呢?
答案 0 :(得分:0)
我假设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);