我一直在使用 express 中的动态路由分配问题,并从 for ... of 循环中偶然发现了意外行为。
我的想法很简单:
创建简单数组
const roomsArray = ["Algebra", "Backend", "Frontend"];
遍历该数组并为数组中的每个项目创建一个路由,所以我尝试使用 for ... of loop
router.get(`/room/${i}`, isUser, (req, res) => {
res.render("index/room", { path: "index/room", name: i });
})
} ```
结果出乎意料(至少对我而言)。每条路线都按预期创建,但无论我要测试哪条路线,分配给 i
的 name
值始终是数组中最后一项的值。
切换到 for 循环或 forEach 解决了问题,一切都按预期运行,但是我想知道 为什么使用 for ... of 语句会发生这种行为?
答案 0 :(得分:2)
你可能已经展示了循环。根据描述,您可能有 var
:
for(var x of [1,2,3])
setTimeout(()=>console.log(x),0);
并且可以只用 let
代替修复:
for(let x of [1,2,3])
setTimeout(()=>console.log(x),0);
let
的作用域是块级别,因此每个回调都会看到一个单独的变量。 var
的作用域是函数级(或此处为全局),因此每个回调都会看到包含最后一个值的相同变量。