难以理解闭包

时间:2018-08-02 21:31:09

标签: javascript closures

为什么此代码返回43作为结果,我希望它得到42的结果。代码如下:

function say667() {
  // Local variable that ends up within closure
  var num = 42;
  var say = function() { console.log(num); }
  num++;
  return say;
}
var sayNumber = say667();
sayNumber();

1 个答案:

答案 0 :(得分:4)

您已经关闭了变量 num,而不是定义函数时变量具有的值。

这是事件的顺序:

  1. 您将42分配给num
  2. 您将num增至43
  3. 您返回一个函数并将其存储在sayNumber
  4. 您调用该函数,该函数读取num的值,即43