一旦接受回调作为输入并返回一个函数的函数。

时间:2018-10-26 05:12:52

标签: javascript closures

编写一个函数,该函数接受回调作为输入并返回一个函数。第一次调用返回的函数时,它应调用回调并返回该输出。如果再调用一次,则无需再次调用该回调,而只是从第一次调用时返回输出值。

帮助!我遇到了类似Syntax-error Illegal return statement的错误,我被困在为上述挑战编写闭包时,这是我的代码:

function once(func) {
  var called = 0,result;
	function inner(num){
    if(!result && called <2){
      called++;
      result = func(num);
      return result;
    }else{
      return result;
    }
    }
    
  }
  return inner;
}

2 个答案:

答案 0 :(得分:1)

您需要在函数外部声明被调用的变量

var called = 0;
function once(func) {
  var result;
	function inner(num){
    if(!result && called <2){
      called++;
      result = func(num);
      return result;
    }else{
      return result;
    }
    }

  return inner;
}

答案 1 :(得分:0)

  

我遇到了类似语法错误的非法返回语句之类的错误

  } //<--- extra/un-wanted
  return inner;
}

尝试一下:

var add = (function(cb) {
  var done = false;
  var data = 0;
  return function(num) {
    if (!done) {
      done = true;
      data = (num + 1);
    }
    cb(data);
  };
});

var bar = function(res) {
  console.log('bar, res = ', res);
};

var foo = add(bar);

foo(2);
foo(1);