在 for 循环中带有声明的逗号运算符

comma operator with declarations in a for-loop

在下面的 JavaScript 代码块中,我不想在 for 范围内声明一个新函数 f,而只是将 () => i 分配给之前的声明 let f,从而创建一个 for 作用域的声明和定义变量 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();
}