首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Firefox开发人员工具中更新窗口对象?

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

Stack Overflow用户
提问于 2019-06-24 07:04:45
回答 1查看 46关注 0票数 0

我想使用Chrome或Firefox开发工具在网站上执行代码。当我执行"window.RR“变量lonely时,它会显示正确的值(它是对站点服务器时间(以毫秒为单位)的度量,每次我执行它时都会给出一个不同的值)。当我在一个循环中使用它时(变量c),那么这个变量在所有循环中都是常量,并且它等于第一个循环的值。

我的代码是:

代码语言:javascript
复制
var i;
b=window.RR;
for (i=0 ; i<400000 ; i++) {
    c=window.RR;
    if (c!==b) {
        alert(c)
    }
}

当我在循环中使用它时,我希望收到正确的值,我如何实现这一点?

EN

回答 1

Stack Overflow用户

发布于 2019-06-24 08:38:59

我假设window.RR变量按一定的时间间隔更新。这意味着变量是异步更新的。

例如,假设window.RR保存服务器的时间戳(以毫秒为单位),下面的代码每毫秒更新一次window.RR

代码语言:javascript
复制
setInterval(function () {
    window.RR += 1;
}, 1);

如果您随后运行一个循环,则可能需要超过1ms才能执行

代码语言:javascript
复制
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更新代码将在循环结束后发生(它必须等待任何其他触发的代码完成,然后才能执行该代码)。

更多信息:

代码语言:javascript
复制
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');
    }
}

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56728318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档