代码之家  ›  专栏  ›  技术社区  ›  Eladian

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

  •  0
  • Eladian  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  0
  •   Sam Clarke    7 年前

    唯一的方法是将count声明为全局函数,或者创建另一个嵌套在counter中的函数来访问count;但是考虑到代码的结构,这似乎不是一个很好的答案。

    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 return++计数,但这不是问题所在 耸肩

        2
  •  1
  •   Szab    7 年前

    据我所知,那是不可能的。这个 count 价值是价值的一部分 counter

    我想你会发现这条线索很有用: Accessing variables trapped by closure