оператор запятой с объявлениями в цикле for - PullRequest
0 голосов
/ 20 марта 2019

В следующем блоке кода JavaScript я НЕ хочу объявлять новую функцию f в for -области, а просто назначить () => 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();
}

Я не хочу менять рамки. Я просто ищу синтаксическое средство, чтобы выразить точное созвездие, как указано в моем вопросе.

1 Ответ

1 голос
/ 20 марта 2019

Я нашел решение:

{
    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();
}
...