Javascript 范围 - 无法访问范围外的值
Javascript Scope - can't access value outside of scope
我想访问 'key',它恰好是从 this.dorequest() 返回后的全局变量。我在 if 块中获得了密钥,但无法在外部的任何地方访问它。有人可以帮忙吗?很确定这是 scope/hoisting 问题。提前致谢!
var key;
jira.addNewIssue = function(issue) {
var options = {
uri: this.makeUri('/issue'),
method: 'POST',
followAllRedirects: true,
json: true,
body: issue
};
this.doRequest(options, function(error, response, body) {
**var key;** (removed this but still an error)
if (error) {
console.log('Error1')
return;
}
else {
key = response.body.key;
console.log("THIS IS RESPONSE BODY KEY:", key); //no errors 123
return key;
}
});
};
console.log("hello key", key); //undefined
请使用window.key
。所有全局 JavaScript 对象、函数和变量自动成为 window 对象的成员。
您正在使用
var key;
在块内,这意味着您在块范围内重新定义它,这使其成为该范围内的不同变量。只需删除 var 语句即可。
此外,您在异步调用中分配了键变量,该调用可能在您到达 console.log 语句之前尚未完成。将您的 console.log 语句移动到回调函数中,或者创建一个事件以在回调完成时触发 console.log 语句。
在异步回调中使用全局变量可能不是一个好主意。我不确定你的 return 语句是否做了任何事情(取决于你正在使用的库的 API)但它肯定不会分配关键变量。
要么将代码包装在闭包中,要么将密钥添加到 window。
即window.key = 未定义;
在闭包中添加代码或将键变量设为全局
即window.key = undefined.
同时检查 response.body.key
的值
我想访问 'key',它恰好是从 this.dorequest() 返回后的全局变量。我在 if 块中获得了密钥,但无法在外部的任何地方访问它。有人可以帮忙吗?很确定这是 scope/hoisting 问题。提前致谢!
var key;
jira.addNewIssue = function(issue) {
var options = {
uri: this.makeUri('/issue'),
method: 'POST',
followAllRedirects: true,
json: true,
body: issue
};
this.doRequest(options, function(error, response, body) {
**var key;** (removed this but still an error)
if (error) {
console.log('Error1')
return;
}
else {
key = response.body.key;
console.log("THIS IS RESPONSE BODY KEY:", key); //no errors 123
return key;
}
});
};
console.log("hello key", key); //undefined
请使用window.key
。所有全局 JavaScript 对象、函数和变量自动成为 window 对象的成员。
您正在使用
var key;
在块内,这意味着您在块范围内重新定义它,这使其成为该范围内的不同变量。只需删除 var 语句即可。
此外,您在异步调用中分配了键变量,该调用可能在您到达 console.log 语句之前尚未完成。将您的 console.log 语句移动到回调函数中,或者创建一个事件以在回调完成时触发 console.log 语句。
在异步回调中使用全局变量可能不是一个好主意。我不确定你的 return 语句是否做了任何事情(取决于你正在使用的库的 API)但它肯定不会分配关键变量。
要么将代码包装在闭包中,要么将密钥添加到 window。
即window.key = 未定义;
在闭包中添加代码或将键变量设为全局
即window.key = undefined.
同时检查 response.body.key