我想使用Chrome或Firefox开发工具在网站上执行代码。当我执行"window.RR“变量lonely时,它会显示正确的值(它是对站点服务器时间(以毫秒为单位)的度量,每次我执行它时都会给出一个不同的值)。当我在一个循环中使用它时(变量c),那么这个变量在所有循环中都是常量,并且它等于第一个循环的值。
我的代码是:
var i;
b=window.RR;
for (i=0 ; i<400000 ; i++) {
c=window.RR;
if (c!==b) {
alert(c)
}
}
当我在循环中使用它时,我希望收到正确的值,我如何实现这一点?
发布于 2019-06-24 08:38:59
我假设window.RR
变量按一定的时间间隔更新。这意味着变量是异步更新的。
例如,假设window.RR
保存服务器的时间戳(以毫秒为单位),下面的代码每毫秒更新一次window.RR
。
setInterval(function () {
window.RR += 1;
}, 1);
如果您随后运行一个循环,则可能需要超过1ms才能执行
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异步代码不会并行运行。
因此,如果执行循环的时间超过1ms,window.RR
更新代码将在循环结束后发生(它必须等待任何其他触发的代码完成,然后才能执行该代码)。
更多信息:
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);
https://stackoverflow.com/questions/56728318
复制相似问题