如何在Firefox开发人员工具中更新窗口对象?

时间:2019-06-23 23:04:45

标签: javascript google-chrome firefox developer-tools

我想使用Chrome或Firefox开发人员工具在网站上执行代码。 当我孤独地执行“ window.RR”变量时,它向我显示正确的值(它是站点服务器时间(以毫秒为单位)的量度,每次执行时,它都会给我一个不同的值)。当我在循环中使用它(变量c)时,该变量在所有循环中都是常数,它等于第一个循环的值。

我的代码是:

var i;
b=window.RR;
for (i=0 ; i<400000 ; i++) {
    c=window.RR;
    if (c!==b) {
        alert(c)
    }
}

我希望在循环中使用它时会收到正确的值,如何实现呢?

1 个答案:

答案 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);