【问题标题】:Javascript Variable not updating/saving [duplicate]Javascript变量不更新/保存[重复]
【发布时间】:2017-11-26 08:59:24
【问题描述】:

我有一个在多个函数中需要的字符串。因此我想将它保存在一个变量中。
但是当我尝试在函数中分配它时,它不会更新变量。

var auth_code = "na";
function safeAuthCode(authcode){
  auth_code = authcode;
  console.log(auth_code);
}

auth_code”此时在控制台中打印得很好,但是当我稍后尝试使用它时,它只包含“na”。
不知道我做错了什么:/

编辑:

这是调用safeAuthCode的函数:

function auth(){
  chrome.identity.launchWebAuthFlow({
    "url": "https://accounts.spotify.com/authorize?client_id="+client_id+
    "&redirect_uri="+ encodeURIComponent(redirectUri) +
    "&response_type=code"+
    "&scope=" + encodeURIComponent(scopes),
    "interactive": true
  },
  function(redirect_url) {
    var url = new URL(redirect_url);
    var code = url.searchParams.get("code");
    safeAuthCode(code);
  });
}

【问题讨论】:

  • 没有足够的代码来做出有根据的猜测,如果你做出minimal reproducible example,你可能会排除为什么会发生这种情况
  • 您是否有可能在代码的多个部分中创建变量?也许保存的值将来会被覆盖。这种数据可能应该保存到sessionStorage,但这样会更有意义。然后您可以在读取/保存时使用getItemsetItem
  • 不,它只设置一次。该代码是 chrome 扩展的一部分。我还能使用会话存储吗? “window.sessionStorage.setItem('authcode', auth_code);”和“console.log(window.sessionStorage.getItem('authcode'));”只返回 null :/
  • 哦,从标签或问题中不清楚您的代码是扩展名。但是有 chrome.storage 对象,可用于保存数据

标签: javascript variables


【解决方案1】:

我假设您遇到的问题是因为全局变量在代码的不同部分被覆盖,或者因为您的代码在某个时间点重新加载,并且初始值被重置。

要保存此类验证码,您可以使用浏览器的sessionStorage 对象。

为确保您只有 1 个这样的对象,您可以使用 const 关键字来定义您的变量(以防该变量的另一个定义稍后出现,您应该会得到一个错误)

const authorisationSettings = {
  get code() {
    return sessionStorage.getItem('authorisationCode') || 'na';
  },
  set code(value) {
    return sessionStorage.setItem('authorisationCode');
  }
};

function saveAuthorisationCode( code ) {
  authorisationSettings.code = code;
}

saveAuthorisationCode( 'test' );
console.log( authorisationSettings.code );

这个sn-p在stackoverflow上不起作用,所以你可以找到jsfiddle here

【讨论】:

  • 仍然只是打印出“na”
  • 是的,这可能是因为您在 chrome 扩展中使用它
  • 好吧,我想我把事情整理好了,使用这个:stackoverflow.com/a/5370400/7313569
【解决方案2】:

这是因为当你的函数被执行时,在该函数的词法环境中已经存在 authcode 变量并且你试图设置这个变量而不是全局 authcode

您需要更改全局变量的名称或函数的参数...

【讨论】:

  • 全局被称为auth_code,似乎是在函数内部设置的,与参数命名不同...
  • 我真的不明白你的意思。我在另一个函数中调用了该函数,传递了在该函数中以不同方式调用的变量 authcode。我也试过重命名它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多