我如何使全局函数内定义的变量newUser? [英] How can I make the variable newUser defined inside a function global?

查看:159
本文介绍了我如何使全局函数内定义的变量newUser?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将变量 newUser options.html 发送到 background.html code> with 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 我有

 函数saveNewUser(newUser)
{
newUser = newUser; //这应该是全球性的?
console.log(来自选项页面的新用户+ newUser);
}

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

但是 newUser 是函数的局部。我的理解是,如果一个变量保存在没有关键字 var 的函数内,它应该是全局的。但在这种情况下并非如此。函数外的 console.log 会抛出未捕获的ReferenceError:newUser未定义错误。



我做错了什么,以及如何修改范围以在函数外部使用 newUser



谢谢。

编辑

background.html 但我仍然得到newUser undefined错误:

  var extension_user 

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

console.log(选项页面的extension_user+ 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 

函数saveNewUser(newUserEmail)
{
window.newUser = newUserEmail; //这应该是全局的
console.log(newUser from options page inside function+ newUser);
}

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


解决方案

newUser saveNewUser 之前,c $ c>变量不存在于全局范围中。因此它给出了一个参考错误。只需在全局范围内将变量 newUser 声明为 var newUser; 。这应该可以解决问题。声明变量时,始终使用 var 关键字。这是一个很好的编程习惯。永远不要在本地范围内声明全局变量。你已经知道为什么。如果这个答案对您有帮助,请投票给我。 该代码澄清我的答案:

  var newUser; //新用户声明为全局

函数saveNewUser(newuser)
{
newUser = newuser; //这应该是全球性的?
console.log(来自选项页面的新用户+ newUser);
}

console.log(newUser from options page+ newUser); //没有更多的引用错误


I send the variable newUser from options.html to background.html with chrome.extension.getBackgroundPage() like this

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)

In background.html I have

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

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

but newUser is local to the function. My understanding is that if a variable is saved inside a function without the keyword var it should be global. But in this case it is not. The console.log outside the function throws Uncaught ReferenceError: newUser is not defined error.

What am I doing wrong and how can I fix the scope to use newUser outside the function?

Thanks.

Edit

I tried the following in background.html but I still get newUser undefined error:

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

Update

I changed both pages to reflect the answers and comments but still outside the function the variable is undefined. What am I doing wrong?

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

解决方案

The newUser variable does not exist in the global scope until the function saveNewUser is called. Thus it gives a reference error. Just declare the variable newUser in the global scope as var newUser;. That should solve the problem. Always use the var keyword when declaring variables. It's a good programming practice. Never declare global variables within local scopes. You already know why. Please vote for me if this answer helped you.

Edits:

Here's the code to clarify my answer:

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

这篇关于我如何使全局函数内定义的变量newUser?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆