为什么不算数,我的输出在控制台中始终为1。我是封闭的新手,我一定会想念一些简单的东西?这是来自jsbin的代码:
var counterFunc = function()
{
var count = 0;
var incCount = function()
{
count = count + 1;
return count;
};
return incCount();
};
var myCounter = counterFunc;
console.log(myCounter());
console.log(myCounter());
答案 0 :(得分:4)
通过从incCount()
返回counterFunc
- 调用的结果,您并没有真正创建闭包函数。您希望返回一个函数,调用 counterFunc()
来创建它:
var counterFunc = function() {
var count = 0;
var incCount = function() {
count = count + 1;
return count;
};
return incCount ;
// ^
};
var myCounter = counterFunc();
// ^^
console.log(myCounter());
console.log(myCounter());
答案 1 :(得分:2)
你应该返回内部函数本身,而不是调用它的结果
因此,您需要将return incCount()
替换为:
return incCount;
您在宣布counterFunc()
:
myCounter
var myCounter = counterFunc(); // myCounter is now the closure
只有这样才会为myCounter
分配对内部函数的引用,这恰好会对局部变量count
保持“闭包”。