Как я могу сделать переменную newUser, определенную внутри функции, глобальной? - PullRequest
2 голосов
/ 26 октября 2011

Я отправляю переменную newUser из options.html в background.html с chrome.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);

Обновление

Я изменил обе страницы, чтобы отразить ответы и комментарии, но все еще за пределами функции переменная не определена. Что я делаю не так?

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);

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Если вы хотите сохранить его как глобальную переменную, вы можете изменить имя переменной в функции:

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);

Все глобальные переменные по сути являются свойствами объекта окна.

0 голосов
/ 26 октября 2011

Переменная newUser не существует в глобальной области, пока не будет вызвана функция saveNewUser. Таким образом, это дает ссылку на ошибку. Просто объявите переменную newUser в глобальной области видимости как var newUser;. Это должно решить проблему. Всегда используйте ключевое слово var при объявлении переменных. Это хорошая практика программирования. Никогда не объявляйте глобальные переменные в локальных областях. Вы уже знаете почему. Пожалуйста, проголосуйте за меня, если вам помог этот ответ.

редактирует:

Вот код для уточнения моего ответа:

var newUser; // new user declared as a global

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

console.log("newUser from options page " + newUser); // no more reference error
...