Использование глобальных переменных в случае sweet.js

Я пытаюсь создать макрос, который увеличивает значение приращения в выходной файл каждый раз, когда он вызывается. Пока что у меня есть это, но оно каждый раз заново инициализирует значение 0:

macro test1 {
    case { _ $x
    } => {
        var n = n ? n+1 : 0;
        letstx $n = [makeValue(n,#{here})];
        return #{
            $n;
        }
    }
}

test1 ()
test1 ()

выходы:

0;
0;

когда то, что я хочу, это:

0;
1;

Как мне определить n быть глобальной переменной, чтобы я мог увеличивать и сохранять ее значение вне макроса?

Обновить:

Я могу заставить его работать, изменив назначение на n к Eval, но это действительно похоже на обман

var n = eval("if (typeof n != 'undefined') n++; else n=0; n")

1 ответ

Решение

На данный момент (есть планы сделать это лучше) вы можете просто использовать глобальный объект:

macro test1 {
    case { _ $x
    } => {
        window.n = typeof window.n !== 'undefined' ? window.n+1 : 0;
        letstx $n = [makeValue(n,#{here})];
        return #{
            $n;
        }
    }
}

test1 ()
test1 ()
Другие вопросы по тегам