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