【问题标题】:Why does this global Javascript variable behave differently inside and outside of a function?为什么这个全局 Javascript 变量在函数内部和外部的行为不同?
【发布时间】:2012-12-17 06:01:58
【问题描述】:

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

【问题讨论】:

  • 它如何“表现不同”?它在“内部”做什么,在“外部”做什么?

标签: javascript


【解决方案1】:

当你记录它之前函数被调用,imageURL undefined,你的代码末尾的日志运行之前 函数被调用。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多