Javascript ReactJS for循环仅显示firebase查询中的最后一个值
我正在尝试使用for循环来循环数组。变量进入firebase查询后,仅显示最后一个值。知道为什么会这样吗Javascript ReactJS for循环仅显示firebase查询中的最后一个值,javascript,reactjs,Javascript,Reactjs,我正在尝试使用for循环来循环数组。变量进入firebase查询后,仅显示最后一个值。知道为什么会这样吗 const handleClose = () => { var tpList = TP; for (var v in tpList) { var tp = tpList[v]; console.log(tp); Firebase.database().ref("Student").c
const handleClose = () => {
var tpList = TP;
for (var v in tpList) {
var tp = tpList[v];
console.log(tp);
Firebase.database().ref("Student").child(tp + "/Name/").once('value').then((res) => {
console.log("Name of " + tp + " is " + res.val());
})
}
第一个控制台日志工作正常,显示索引0-5中的正确值。但是,第二个控制台日志仅显示索引值5。有什么建议这里可能有什么问题吗?如评论中所述,您应该在循环中使用
let
而不是var
:
const handleClose = () => {
var tpList = TP;
for (let v in tpList) { // Use let here
let tp = tpList[v]; // (optional) Also here to keep the scope inside the loop
console.log(tp);
Firebase.database().ref("Student").child(tp + "/Name/").once('value').then((res) => {
console.log("Name of " + tp + " is " + res.val());
})
}
原因是,在ES6中,当在循环中使用
let
时,声明的变量将为循环的每次迭代获得一个新绑定,因此闭包将正确捕获v
的每个值,使用var
时,不要只捕获最后一个变量,而要在循环中使用让而不是var
。如果答案有帮助,你应该接受/upvote。@giorgim我接受了,但我收到通知说“记录声誉低于15的人的投票,但不改变公开显示的post分数。”:(请解释为什么在for循环中使用let而不是var,可能是关于java脚本中变量词法范围的一些见解…)。。。。