在Javascript中执行简单闭包时出现运行时错误

在Javascript中执行简单闭包时出现运行时错误,javascript,closures,higher-order-functions,Javascript,Closures,Higher Order Functions,我是JS新手,正在努力学习。该规范要求: 编写一个函数,将另一个函数*作为参数,并创建只能调用一次的函数版本。重复调用修改后的函数将无效,返回原始调用的值。如果不使用闭包,您如何做到这一点?有可能吗?你怎么能在结束的情况下做到这一点*注:此原始输入函数不应有任何参数 这就是我所拥有的: var divide = function () { var x = 2; var y = 6; return y/x; } var mainFunc = function (func) { return f

我是JS新手,正在努力学习。该规范要求: 编写一个函数,将另一个函数*作为参数,并创建只能调用一次的函数版本。重复调用修改后的函数将无效,返回原始调用的值。如果不使用闭包,您如何做到这一点?有可能吗?你怎么能在结束的情况下做到这一点*注:此原始输入函数不应有任何参数

这就是我所拥有的:

var divide = function () {
var x = 2;
var y = 6;

return y/x;
}

var mainFunc = function (func) {
return func(){
    return y/x + 1;
}
}

var output = mainFunc(divide);
console.log(divide());
console.log(output());
console.log(output());
我在“return func(){”处得到一个“意外的标记{”错误。我不太明白我做错了什么?根据规范,我将divide()传递给mainFunc()并将其设置为引用变量输出。然后我调用divide()和output()多次测试闭包是否有效,修改后的函数是否只发生一次。我遗漏了什么或不理解什么

谢谢你的帮助。

给你:

function runonce(func) {
  return (function(func) {
    var ran = false;
    var retval;
    return function() {
      if (!ran) {
        ran = true;
        retval = func();
      }
      return retval;
    }
  })(func);
}

function realfunction() {
  console.log('really running');
  return 5;
}

var realfunctionrunner = runonce(realfunction);
realfunctionrunner();
realfunctionrunner();
realfunctionrunner();

研究代码,整个技巧是一个“自包含的库”,它的结果是从runonce函数返回的

return func(){//这是一个语法错误,{是意外的标记这里怎么是语法错误?我将divide()传递到mainFunc(),所以func()应该具有divide的属性,对吗?如果你解释一下你到底想要实现什么,也许会有所帮助。用文字,而不是代码。好吧,我想实现规范所要求的——编写一个函数,将函数作为参数,并创建一个只能调用一次的版本。原始函数不应该任何参数。