猿问

在 foreach 循环中无法访问变量

我正在尝试为对话流构建一个 webhook,但是当我运行代码匹配时无法访问代码中的某些变量未定义


var findclass = (data, day, time) => {

      var match;

      data.forEach(entry => {

        if (entry.day === day && entry.time === time) {

          console.log("found");

          match=entry;//this statement has no effect on above var match

//instead it creates a new local variable

        }

      });

      return match;

    }




exports.tt = functions.https.onRequest((request, response) => {

  let qr = request.body.queryResult;

  let day = qr.parameters.day;

  let time = parseInt(qr.parameters.time.substring(11, 13));

  let data = [

    {

      day: "monday",

      time: 11,

      type: "lecture",

      batches: ["A", "B1", "B4", "B3", "B2"],

      subject: {

        name: "Basic Numerical Methods",

        name_short: "BNM",

        coursecode: "17B1NMA531",

        coursecode_short: "17MA531"

      },

      class: "CS1",

      teachers: "SSH",

      semester: 5

    },

    {

      day: "monday",

      time: 15,

      type: "lecture",

      batches: ["A6", "A9"],

      subject: {

        name: "Environmental Science",

        name_short: "EVS",

        coursecode: "15B11GE301",

        coursecode_short: "GE301"

      },

      class: "CS1",

      teachers: "EKT",

      semester: 5

    }]

var match = findclass(data, day, time);

  console.log(JSON.stringify(match));

  if (match) {

    response.send({

      fulfillmentText: `Yes, ${match.subject.name_short || match.subject.name}`

    });

  } else {

    response.send({

      fulfillmentText: `No class on ${day} ,${time} hr`

    });

  }

如果我删除 return match 语句,vscode 代码也显示 var match 未使用,这意味着它不考虑 match = entry ,但我不明白为什么?


幕布斯7119047
浏览 495回答 3
3回答

POPMUISE

我不知道原因,但两个更改修复了代码1) 在顶部添加“使用严格”。2) 定义函数为const findclass = () => {}而不是 var

人到中年有点甜

我的猜测是循环中实际上没有任何匹配,因此match保持未定义。您是否确定循环中的某些内容实际上是匹配的?此外,在 VSCode 中,如果您只是分配一个变量,而不是使用它(例如,在return语句中),它会显示该变量未使用,这是意料之中的。

千万里不及你

我的猜测是您的声明:var match ...正在吊装……见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var在您的代码中,您已声明:var match ...两次。我认为 findClass 函数体中的声明可能要更改为局部变量...let match;(这是一个猜测,将根据要求删除此答案,或者如果出现更好的答案)。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答