一个关于柯里化和闭包的问题,求大牛帮助!!!

function move(start) {
  var pos = start;
  return function () {
    console.log('Move to ' + (pos += 2) + '.');
  }
}

var move_next = move(6); 
move_next();  // Move to 8. 
move_next();  // Move to 10.

第一次move是8,第二次move就是10了。为什么?
通过柯里化应该可以拥有一个可以记忆的函数,但是我完全看不懂。
难道执行move_next()不是重新调用move_next,然后start不是等于6吗?

阅读 2.5k
3 个回答

运行带一行代码后,move_next等于下面的代码。

function () {
    console.log('Move to ' + (pos += 2) + '.');
}

pos就是move中的变量(等于start)。每次运行move_next增加了pos

pos被闭包引用了,函数结束后没有被释放,每次执行move_next会自加2

很明显,这是典型的闭包,pos被外部函数move_next引用了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题