Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript变量未更新/保存_Javascript_Variables - Fatal编程技术网

Javascript变量未更新/保存

Javascript变量未更新/保存,javascript,variables,Javascript,Variables,我有一个字符串,我需要在多个函数。因此我想把它保存在一个变量中但是当我尝试在函数中赋值时,它不会更新变量 var auth_code = "na"; function safeAuthCode(authcode){ auth_code = authcode; console.log(auth_code); } “auth_code”此时在控制台中打印得很好,但当我稍后尝试使用它时,它只包含“na”不确定我做错了什么,tbh:/ 编辑: 这是调用safeAuthCode的函数: func

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

var auth_code = "na";
function safeAuthCode(authcode){
  auth_code = authcode;
  console.log(auth_code);
}
auth_code
”此时在控制台中打印得很好,但当我稍后尝试使用它时,它只包含“na”
不确定我做错了什么,tbh:/

编辑:

这是调用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);
  });
}

这是因为在执行函数时,该函数的词法环境中已经存在
authcode
变量,并且您正在尝试设置此变量,而不是全局
authcode


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

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

要保存此类身份验证代码,可以使用浏览器的对象

为了确保只有一个这样的对象,可以使用关键字定义变量(如果该变量的另一个定义稍后会出现,您应该会抛出一个错误)


此代码段在stackoverflow上不起作用,因此您可以发现

没有足够的代码进行有根据的猜测,如果您做出判断,您可以排除发生这种情况的原因。您是否可以在代码的一部分以上创建变量?可能保存的值将来会被覆盖。不过,这种数据可能应该保存到
sessionStorage
中,这样会更有意义。然后,您可以在读取/保存它时使用
getItem
setItem
。否,它只设置一次。该代码是chrome扩展的一部分。我仍然能够使用会话存储吗?“window.sessionStorage.setItem('authcode',auth_code);”和“console.log(window.sessionStorage.getItem('authcode'));”只返回null:/噢,从标记或问题中不清楚代码是扩展名。然而,有一个
chrome.storage
对象,可以用来保存数据。全局被称为
auth_code
,似乎是在函数内部设置的,名称与参数不同……我真的不知道你的意思。我在另一个函数中调用了该函数,该函数传递的变量authcode在该函数中的调用方式不同。我还试着重新命名它,直到打印出“na”是的,这可能是因为你在chrome扩展中使用了它好吧,我想我已经解决了问题,用这个:
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 );