Javascript-从外部关闭函数中的访问变量

时间:2018-11-05 23:23:42

标签: javascript variables closures capture

我想知道是否有某种方法可以从该函数的外部获取嵌套函数捕获的变量的值。用言语解释有点棘手,所以这是我想要实现的目标:

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 :(得分:1)

据我所知-这是不可能的。 count值是counter函数的一部分,只能在此范围内或在该函数内部创建的函数范围内访问(基本上是闭包)。

我认为您可能会发现此线程很有用:Accessing variables trapped by closure

答案 1 :(得分:0)

执行此操作的唯一方法是将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,但这不是耸肩的问题。