Javascript - 从外部访问函数闭包中的变量
Javascript - Access variable in function closure from outside
我想知道是否有某种方法可以从该函数外部获取已被嵌套函数捕获的变量的值。用文字解释有点棘手,所以这就是我想要实现的目标:
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())
谢谢!
据我所知 - 这是不可能的。 count
值是 counter
函数的一部分,只能在此范围内或在该函数内创建的函数范围内访问(因此基本上是闭包)。
我想你可能会发现这个线程有用:Accessing variables trapped by closure
唯一的方法是将 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 return ++count,但这不是问题 耸耸肩。
我想知道是否有某种方法可以从该函数外部获取已被嵌套函数捕获的变量的值。用文字解释有点棘手,所以这就是我想要实现的目标:
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())
谢谢!
据我所知 - 这是不可能的。 count
值是 counter
函数的一部分,只能在此范围内或在该函数内创建的函数范围内访问(因此基本上是闭包)。
我想你可能会发现这个线程有用:Accessing variables trapped by closure
唯一的方法是将 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 return ++count,但这不是问题 耸耸肩。