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

2 番目の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 に答える