Javascript - переменная доступа при закрытии функции извне - PullRequest
0 голосов
/ 06 ноября 2018

Мне было интересно, есть ли какой-нибудь способ получить значение переменной, которая была захвачена вложенной функцией, за пределами этой упомянутой функции. Немного сложно объяснить словами, вот что я пытаюсь достичь:

function counter(){
    let count = 0;
    return function counterIncrementer(){
      ++count;
    }
}

function someReceiever(counterIncrementer){
    // From here, somehow access the value of count captured by 
    // counterIncrementer.
    // -> Without modifying the counter/returned counterIncrementer function 
    //    before runtime
}
someReceiever(counter())

Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Единственный способ сделать это - объявить count как глобальный или создать другую функцию только для доступа к count, вложенную в counter; но учитывая структуру вашего кода, не похоже, что это отличный ответ.

function counter(){
    let count = 0;
    return [
        function counterIncrementer(){
            ++count;
        }, 
        function counterGetter() {
            return count;
        }
    ];
}

function someReceiever(counterIncrementerPack){
    let counterIncrementer = counterIncrementerPack[0];
    let counterGetter = counterIncrementerPack[1];

    console.log(counterIncrementer(), counterGetter(), counterGetter(), counterIncrementer(), counterGetter());
}
someReceiever(counter())

Выходы: undefined 1 1 undefined 2

Примечание: вы также можете захотеть вернуть counterIncrementer ++ count, но это был не вопрос shrug .

0 голосов
/ 06 ноября 2018

Насколько я знаю, это невозможно сделать. Значение count является частью функции counter и доступно только в этой области или в области функций, созданных внутри этой функции (то есть в основном замыканий).

Думаю, вам может пригодиться эта тема: Доступ к переменным, захваченным замыканием

...