在下面的JavaScript代码块中,我不想在f
-scope中声明一个新函数for
,而只是将() => i
赋值给先前声明的let f
,从而为for
-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
循环中,我如何将f = () => i
与先前的let i = 'a'
分开?
将它放在括号中会产生Syntax Error
:
{
let f;
for ((let i = 'a'), f = () => i; i == 'a'; ) {
i = 'b';
}
f();
}
我不想改变范围。我只是在寻找一个句法均值来表达我的问题中给出的确切范围星座。
我找到了解决方案:
{
let f;
for (let i = (f = () => i, 'a'); i == 'a'; ) {
i = 'b';
}
f();
}
或者使用额外的虚拟助手:
{
let f;
for (let i = 'a', dummy = (f = () => i, 'ignore'); i == 'a'; ) {
i = 'b';
}
f();
}