Javascript Chrome扩展中的突然错误:“0”;无法在初始化之前访问“;

Javascript Chrome扩展中的突然错误:“0”;无法在初始化之前访问“;,javascript,google-chrome-extension,initialization,Javascript,Google Chrome Extension,Initialization,在Chrome extension中,为了捕获激活或更新的选项卡并从中获取url,我使用了如下结构 chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => { if (changeInfo.url) run(tab); }); chrome.tabs.onActivated.addListener(info => { chrome.tabs.get(info.tabId, run); }); co

在Chrome extension中,为了捕获激活或更新的选项卡并从中获取url,我使用了如下结构

chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
    if (changeInfo.url) run(tab);
});

chrome.tabs.onActivated.addListener(info => {
    chrome.tabs.get(info.tabId, run);
});

const processingTabId = {};

function run(tab) {
    if (processingTabId[tab.id]) return;
    processingTabId[tab.id] = true;

    let newUrl = new URL(tab.pendingUrl || tab.url)
    currentHost = newUrl.host;
有些日子,它就像一个符咒,这个扩展正在使用中。但今天,在没有Chrome更新或任何代码更改的情况下,我突然意识到,我在任何情况下都不会得到url,不会在选项卡激活时,也不会在选项卡更新(刷新)时。查看扩展后端时,我发现了一个错误,但从未出现过:

无法在初始化之前访问“processingTabId”

这些代码行被标记为:

function run(tab) {
    if (processingTabId[tab.id]) return;

有人知道这个错误是什么意思吗?它是如何修复的,为什么会突然发生?

在调用使用它的
run()
函数之前,需要初始化
processingTabId
。因此,在添加调用
run()
的侦听器之前,将声明放在顶部


尝试将变量声明放在顶部到顶部<代码>似乎工作。非常感谢。您能否简单地解释一下,为什么错误不存在,然后上升,然后将变量移到顶部修复了它?调用
run()
的事件之一是在初始化常量之前触发的。
const processingTabId = {};

chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
    if (changeInfo.url) run(tab);
});

chrome.tabs.onActivated.addListener(info => {
    chrome.tabs.get(info.tabId, run);
});

function run(tab) {
    if (processingTabId[tab.id]) return;
    processingTabId[tab.id] = true;

    let newUrl = new URL(tab.pendingUrl || tab.url)
    currentHost = newUrl.host;