Javascript 如何从回调函数访问外部变量?

Javascript 如何从回调函数访问外部变量?,javascript,node.js,Javascript,Node.js,我在以下代码片段中遇到问题。我无法从回调函数中访问userId,也无法返回WhiteListedUserId是否包含userId。根据调试器,当我进入回调时,userId是未定义的 有人能解释一下原因吗?如何解决这个问题?我已经有一段时间不使用javascript了 function userInWhitelist(userFileName) { var userId = userFileName.replace('.txt', ''); request({ url: white

我在以下代码片段中遇到问题。我无法从回调函数中访问
userId
,也无法返回
WhiteListedUserId
是否包含
userId
。根据调试器,当我进入回调时,
userId
是未定义的

有人能解释一下原因吗?如何解决这个问题?我已经有一段时间不使用javascript了

function userInWhitelist(userFileName) {
  var userId = userFileName.replace('.txt', '');
  request({
    url: whitelistURL
  }, function(err, resp, body, userId) {
    if (resp.statusCode == 200) {
      var users = JSON.parse(body).data;
      var whitelistedUserIds = _.map(users, (user) => { return user.id; });
      // How to access userId ??
      // How to return whitelistedUserIds.includes(userId)
    }
  });

回调的
userId
正在覆盖外部的用户id。 只需从回调中删除
userId

function userInWhitelist(userFileName) {
  var userId = userFileName.replace('.txt', '');
  request({
    url: whitelistURL
  }, function(err, resp, body) {
    if (resp.statusCode == 200) {
      var users = JSON.parse(body).data;
      var whitelistedUserIds = _.map(users, (user) => { return user.id; });
     // here you have access to userId
    }
  });

您可能希望提到回调的
userId
正在跟踪外部回调。仅仅说“删除”并不能告诉任何人真正发生了什么。@JosephDeeamer我的英语很差,对我来说,解释起来比仅仅显示正确的代码更难这叫“隐藏”。给一个或另一个起不同的名字。