Javascript范围 - 无法访问范围

时间:2016-11-01 16:22:27

标签: javascript angularjs node.js scope hoisting

我想从this.dorequest()返回后访问恰好是全局变量的'key'。我在if块中获取了密钥,但无法在外部访问它。有人可以帮忙吗?很确定它是范围/提升问题。提前谢谢!

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

4 个答案:

答案 0 :(得分:3)

您正在使用

var key;

在块内部,这意味着您在块范围内重新定义它,使其成为该范围内的不同变量。只需删除var语句。

另外,在异步调用中分配键变量,在到达console.log语句之前可能尚未完成。将console.log语句移动到回调函数中或创建一个事件以在回调结束时触发console.log语句。

在异步回调中使用全局变量可能不是一个好主意。我不确定你的return语句是否有任何作用(取决于你正在使用的库的API),但肯定不会分配关键变量。

答案 1 :(得分:0)

请使用window.key。所有全局JavaScript对象,函数和变量都自动成为窗口对象的成员。

答案 2 :(得分:0)

将代码包装在闭包中或将键添加到窗口。

即。 window.key = undefined;

答案 3 :(得分:0)

在闭包中添加代码或使键变量全局

即。 window.key = undefined.

同时检查response.body.key

的值