关闭时出错

时间:2014-06-25 15:10:02

标签: javascript closures

JS Bin example

为什么不算数,我的输出在控制台中始终为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());

2 个答案:

答案 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保持“闭包”。