0

我试图理解为什么我的全局变量 '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 记录到控制台(未定义)
4

3 回答 3

3

当第二个console.log运行时,该函数还没有被调用,因此变量还没有被分配任何东西。但是,在函数内部,它收到了一个值,这就是您所看到的。

于 2013-01-02T21:23:04.260 回答
2

好吧,当您在调用函数之前记录它imageURL undefined,代码末尾的日志会在调用函数之前运行。

于 2013-01-02T21:22:53.053 回答
2

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

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

于 2013-01-02T21:23:40.510 回答