我对javascript中的评估顺序感到困惑。例如,这是我写的代码
this.getTabUrl=function()
{
this.logToConsole("1"+"getTabUrl is called");
var myUrl
chrome.tabs.getSelected(null, function(tab)
{
myUrl = tab.url;
console.log("2"+tab.url);
console.log("3"+myUrl);
//this.parent.logToConsole(tabUrl);
});
this.tabUrl=myUrl;
this.logToConsole("3.1"+myUrl);
this.logToConsole("4"+this.tabUrl);
return myUrl;
}
当我调用此函数时,这是我得到的输出
> 1getTabUrl is called
> 3.1undefined
> 4undefined
> 2undefined
3.1之前如何评估3.1和4。
答案 0 :(得分:3)
传递给chrome.tabs.getSelected()
的函数是异步执行的。
您需要将需要传递的所有内容放入回调函数内的回调中。请注意,这意味着您不能return
来自外部函数的值,它依赖于回调中的某些内容。您需要接受一个回调参数,并使用返回值调用它。