对此代码感到有点困惑
var counter = function() {
//...
var count = 0;
return function () {
return count = count + 1;
}
}
var nextValue = counter();
console.log(nextValue());
nextValue.count = 7;
console.log(nextValue());
console.log(nextValue.count);
console.log(nextValue());
输出
1
2
7
3
这是违反直觉的。计数有两种表示形式。一个在外部函数nextValue上,一个只有内部匿名函数可以看到。
纠正,还是我遗失了什么?
答案 0 :(得分:4)
表达式nextValue.count
不表示函数内声明的局部变量“count”。实际上,不可能从函数外部的代码创建对函数本地变量的引用。你在那里引用的只是函数对象的一个属性。
所以,是的,返回函数可以访问的“count”变量实际上对该函数是完全私有的,并且它被保存在由“counter”函数调用形成的闭包中。
如果您 想要这样做,您可以这样做:
function counter() {
function actual() {
return actual.count = actual.count + 1;
}
actual.count = 0;
return actual;
}
编辑 - (修复了伪造的代码)里面的名称“actual”给返回的函数安全访问函数对象本身;最初我在那里输入了“this”,除非外部代码明确地设置它,否则这将不起作用。
答案 1 :(得分:1)
您描述它的方式,count
实际上是一个私有变量。当您分配到nextValue.count
时,您正在创建一个单独的媒体资源 - 不会访问由您的计数器增加的内部count
。