为什么这个全局Javascript变量在函数内外的行为方式不同?

时间:2013-01-02 21:21:17

标签: javascript

我试图理解为什么我的全局变量'imageUrl'在函数'genericOnClick()'内部和外部表现不同

var imageUrl

var id = chrome.contextMenus.create({
    "title": "Add to JC Queue",
    "contexts": ["image"],
    "onclick": genericOnClick
});

function genericOnClick(info) {
    imageUrl = info.srcUrl;
    console.log(imageUrl);
    chrome.tabs.create({
        url: chrome.extension.getURL('dialog.html'),
        active: false
    }, function (tab) {
        // After the tab has been created, open a window to inject the tab
        chrome.windows.create({
            tabId: tab.id,
            type: 'popup',
            focused: true
        });
    });
}

console.log(imageUrl);

请告诉我出错的地方:

  1. 将imageUrl声明为全局变量
  2. 将id声明为全局变量并运行函数OnClick()
  3. 将imageUrl记录到函数内的控制台(显示正常)
  4. 在函数运行后将imageUrl记录到控制台(未定义)

3 个答案:

答案 0 :(得分:3)

当第二个console.log运行时,该函数尚未被调用,因此尚未为该变量分配任何内容。但是,在函数内部它已经收到了一个值,这就是你所看到的。

答案 1 :(得分:2)

当您在调用该函数>之前之前记录时,imageURL undefined,代码末尾的日志就会运行之前调用该函数。

答案 2 :(得分:2)

最后一行(console.log(imageUrl);)几乎在您声明imageUrl没有值后立即运行,因此在此时未定义。

尝试将imageUrl设置为初始值,您将看到该值将被记录。