在函数内部分配值后,JavaScript变量未定义

时间:2020-05-10 03:09:48

标签: javascript google-chrome google-chrome-extension

 var currentURL;
  chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
    currentURL = tabs[0].url;
    chrome.tabs.remove(tabs[0].id);
    console.log(currentURL);
  });
  console.log(currentURL);

上面的代码应该将当前页面的URL分配给变量“ currentURL”,但是,函数内部的控制台日志记录正确的值,而函数外部的控制台日志记录“ undefined”。

我无法弄清楚为什么在函数外未定义“ currentURL”的值,将不胜感激!

3 个答案:

答案 0 :(得分:1)

回调是异步的,这就是为什么您不能依赖外部console.log的原因。外部日志发生在仍在事件队列中等待的异步回调之前。在发生外部日志之后,将处理回调,因此您仅可以成功在该回调内部记录tabs值。

有关更多信息,请参阅此文档: http://developer.chrome.com/extensions/overview.html#sync-example

答案 1 :(得分:1)

false false true false 方法是异步的。因此,运行最后一行时尚未定义chrome.tabs.query()的值。

查看异步/等待功能应有助于您对程序进行编码,以等待回调解决后再继续处理。

答案 2 :(得分:0)

     var currentURL; // executed first
      chrome.tabs.query({ active: true, currentWindow: true }// executed second
, function (tabs) { // -> executed fourth
        currentURL = tabs[0].url;
        chrome.tabs.remove(tabs[0].id);
        console.log(currentURL);
      });
      console.log(currentURL);// executed third

请注意chrome.tabs.query中的函数是一个回调。这意味着它将在您在外部编写的控制台日志之后启动。这就是为什么console.log中的值仍未定义

的原因