为什么最后一个if语句总是执行?

时间:2019-05-27 15:18:07

标签: javascript google-chrome-extension

我试图在stop == false时使函数终止,但是我不确定从调试警报告诉我的一切如何执行。

代码:

chrome.tabs.onRemoved.addListener(checkTabs);
function checkTabs() {

  var stop = true;
  chrome.windows.getAll({populate:true},function(windows)
  {
    windows.forEach(function(window)
    {
      window.tabs.forEach(function(tab)
      {
        for(var i = 0; i < numWatch; i++)
        {
          if(tab.url.indexOf(watchList[i]) != -1)
          {
            stop = false;
            alert("(1)" + stop); //When the if condition is false, I somehow get this alert after the one below
            return;
          }
        }
      });
    });
  });

  alert("(2)" + stop); //I always get this alert first and it always reads "true"
  if(stop == true)
  {
    clearInterval(timer);
    timerOn = false;
  }
}

该代码块始终执行-我的第一个警报始终为“ true”;即使我以将stop设置为false的方式设置选项卡,它也会首先警告“ true”,然后警告“ false”:

  if(stop == true)
  {
    clearInterval(timer);
    timerOn = false;
  }

这是为什么?我可以看到一个使程序正常工作的非常简单的解决方法,但是我很好奇为什么我的函数的行为如此奇怪:底部的if语句似乎以某种方式在其前面的语句之前执行...

这是我的清单(尽管我怀疑它是否相关)-上面的代码是我的background.js脚本的一部分:

{
  "manifest_version": 2,
  "name": "Drill Sergeant",
  "description": "Tracks time spent on 'watchlist' websites",
  "version": "1.0.0",
  "browser_action": {
    "default_popup": "popup.html"
  },
  "background": {"scripts": ["background.js"]},
  "permissions": ["activeTab", "webNavigation", "notifications", "tabs", "background"]
}

0 个答案:

没有答案