【问题标题】:access variable after define it inside a function [duplicate]在函数内定义变量后访问变量[重复]
【发布时间】:2016-12-10 22:02:33
【问题描述】:

我正在尝试访问函数外部的变量,但未定义

 meliObject.get('users/me', function (err, res) {
           nickname = res.nickname;
  });

console.log(nickname);

如何访问昵称?

编辑

我将代码更改为:

var nickname;

        meliObject.get('users/me', function (err, res) {

            nickname = res.nickname;


        });

        console.log(nickname);

但我仍然不确定

【问题讨论】:

  • 这个问题是您对回调的发起。欢迎!
  • @NickA — 不,该变量是全局变量。这是关于时间,而不是范围。

标签: javascript node.js


【解决方案1】:

该函数的结果是异步的,所以你不能这样做。 Javascript 流程是这样的:运行meliObject.get,立即返回,运行console.log(nickname),然后等待回调被调用。要正确执行 console.log,只需执行以下操作:

meliObject.get('users/me', function (err, res) {
   nickname = res.nickname;
   console.log(nickname);
});

现在,回答你的问题,要在函数外声明一个变量,只需使用 var/let/const:

var a = 2;
(function () {
    a = 3;
})();
console.log(a);

它将按预期打印。

【讨论】:

  • 我在问题中更改了我的代码,但我得到了未定义
  • 那是因为我描述的第一个问题;您的错误不是范围,而是实际上是异步的。你需要把console.log放在回调函数里面,因为JS运行的顺序(更多细节见我的第一段)
猜你喜欢
  • 2020-06-16
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 2017-05-07
相关资源
最近更新 更多