【发布时间】:2019-08-11 07:44:21
【问题描述】:
在下面的 JavaScript 代码块中,我不想在 for 范围内声明一个新函数 f,而只是将 () => i 分配给先前声明的 let f,从而为 @ 创建一个闭包987654325@-scoped 声明和定义变量i。
不幸的是,代码导致Type Error: f is not a function,因为f = () => i 被解释为let f = () => i:
{
let f;
for (let i = 'a', f = () => i; i == 'a'; ) {
i = 'b';
}
f();
}
在for-loop 中,如何将f = () => i 与先例let i = 'a' 分开?
将它放在括号中会产生Syntax Error:
{
let f;
for ((let i = 'a'), f = () => i; i == 'a'; ) {
i = 'b';
}
f();
}
我不想更改范围。我只是在寻找一种句法意思来表达我的问题中给出的确切范围星座。
【问题讨论】:
-
有什么理由要避免在循环体中分配 f ?
-
@kuzyn 是的,闭包(在
f和i之间)会有所不同,因为for块中的变量i具有另一个范围作为变量ifor (...; ...; ...)。虽然这并不明显。 -
我认为我们需要查看一个实际示例,说明您在此处尝试实现的目标。你显然简化版有点做作@Min-SooPipefeet
-
@Liam 是的,这绝对是人为的,因为它只是关于在
for-loop 中使用逗号运算符的研究(而不是关于箭头函数)。这就是为什么不应该从关键字中删除comma,也不应该添加arrow-functions。 -
请注意,
,不是这里的逗号运算符,它是多个变量声明之间的分隔符(就像在普通的多行声明中一样)。
标签: javascript for-loop declaration comma let