javascript - 如何使函数内定义的变量 newUser 成为全局变量?

标签 javascript scope google-chrome-extension

我发送变量 newUser来自 options.htmlbackground.htmlchrome.extension.getBackgroundPage()像这样

document.getElementById("save").addEventListener(
    "click", function ()
    {
        var newUser = document.getElementById("getEmail").value;
        var bkg = chrome.extension.getBackgroundPage();
        bkg.saveNewUser(newUser);
        console.log("newUser " + newUser);
    } , false)

background.html我有

function saveNewUser (newUser)
{
    newUser = newUser; //this should be global?
    console.log("newUser from options page " + newUser);
}

console.log("newUser from options page " + newUser);

但是newUser是函数的局部。我的理解是,如果一个变量保存在一个没有关键字 var 的函数中它应该是全局性的。但在这种情况下并非如此。 console.log函数外抛出 Uncaught ReferenceError: newUser is not defined错误。

我做错了什么以及如何修复范围以使用 newUser函数外?

谢谢。

编辑

我在 background.html 中尝试了以下内容但我仍然收到 newUser 未定义错误:

var extension_user

function saveNewUser (newUser)
{
    extension_user = newUser; //this should be global
    console.log("extension_user from options page " + extension_user);
}

console.log("extension_user from options page " + extension_user);

更新

我更改了两个页面以反射(reflect)答案和评论,但仍然在函数之外,变量未定义。我做错了什么?

options.html

document.getElementById("save").addEventListener(
    "click", function ()
    {
        var newUserEmail = document.getElementById("getEmail").value;
        var bkg = chrome.extension.getBackgroundPage();
        bkg.saveNewUser(newUserEmail);
        console.log("newUserEmail " + newUserEmail);
    } , false)

background.html

var newUser

function saveNewUser (newUserEmail)
{
    window.newUser = newUserEmail; //this should be global
    console.log("newUser from options page inside function" + newUser);
}

console.log("newUser from options page " + newUser);

最佳答案

如果要将其保存为全局变量,可以在函数中更改变量名:

function saveNewUser (newUserVar)
{
    newUser = newUserVar; //this should be global?
    console.log("newUser from options page " + newUserVar);
}

console.log("newUser from options page " + newUser);

或者您可以使用窗口范围(与全局范围相同):

function saveNewUser (newUser)
{
    window.newUser = newUser; //this should be global?
    console.log("newUser from options page " + newUser);
}

console.log("newUser from options page " + newUser);

所有全局变量本质上都是窗口对象的属性。

关于javascript - 如何使函数内定义的变量 newUser 成为全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7904144/

相关文章:

javascript - 如何使用 Intro.js 编程制作多页介绍

javascript - 同时打开多个窗口、弹出窗口和新选项卡

模块中 Julia 宏中表达式和变量的范围

javascript - AngularJs 的 ng-options - 澄清吗?

javascript - 更新时从散点图中删除旧圆圈

javascript - 如何在作为参数传递的函数中使用范围内变量

c++ - Boost.Python - 如何重新进入模块范围?

javascript - 如何通过 Chrome 扩展程序删除事件监听器

google-chrome-extension - 在事件选项卡旁边打开选项卡

google-chrome-extension - YouTube 视频的 getCurrentTime()