javascript - 理解闭包有困难

标签 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();

最佳答案

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

这是事件的顺序:

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

关于javascript - 理解闭包有困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51662431/

相关文章:

swift - 函数会导致循环引用吗?

node.js - Socket.io 断开事件和相关关闭的垃圾回收

javascript - 动态获取当前 LatLng(Google map )

Javascript字符串通过连接构造?

javascript - 如何限制嵌套可排序子级别?

ios - dispatch_group_leave swift 崩溃

javascript - 在 Javascript 中使用闭包对对象调用 new

javascript - HTML 中的用户名和密码验证

javascript - 多个点击监听器被添加到同一个 html 元素中

JavaScript 顺序函数