如果我们想在currying中保留一个值,javascript的闭包是如何工作的

use*_*582 0 javascript closures

我写了代码

// Handlers
function successHandlerFactory (savedFlag) {

  return function (res, savedFlag){
    if (res.data && res.status == 200) {
      ngcoupon_offerManager.addOffers(res.data.offers, -1, savedFlag);
      console.log('offers response', res, 'savedFlag', savedFlag);
    } else {
      console.error('something is wrong to get offers', res);
    }
  }
};

var offerSuccessHandler = function() {
    return successHandlerFactory();
}();
var savedofferSuccessHandler = function () {
  return successHandlerFactory(true);
}();
Run Code Online (Sandbox Code Playgroud)

但显然它给出了savedFlag undefined我所做的每一个任务.

为什么这不起作用

小智 5

问题出在这部分代码中:

function successHandlerFactory (savedFlag) {
  return function (res, savedFlag){
    ...
Run Code Online (Sandbox Code Playgroud)

您将savedFlag在内部函数中重新声明,该函数最终成为成功处理程序中捕获的变量.尝试简单地删除返回函数的第二个参数.