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

的值