Порядок оценки в javascript - PullRequest
0 голосов
/ 03 июня 2011

Я запутался в отношении порядка оценки в 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 и 4 оцениваются первыми, прежде чем 2.

1 Ответ

3 голосов
/ 03 июня 2011

Функция, переданная в chrome.tabs.getSelected(), выполняется асинхронно.

Вам нужно поместить все, что нужно, все, что передается в функцию обратного вызова, в функцию обратного вызова. Обратите внимание, что это означает, что вы не можете return значение из внешней функции, которое зависит от чего-то из обратного вызова. Вместо этого вам нужно принять аргумент обратного вызова и вызвать его с возвращаемым значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...