在Javascript中执行简单闭包时出现运行时错误
我是JS新手,正在努力学习。该规范要求: 编写一个函数,将另一个函数*作为参数,并创建只能调用一次的函数版本。重复调用修改后的函数将无效,返回原始调用的值。如果不使用闭包,您如何做到这一点?有可能吗?你怎么能在结束的情况下做到这一点*注:此原始输入函数不应有任何参数 这就是我所拥有的:在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
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的属性,对吗?如果你解释一下你到底想要实现什么,也许会有所帮助。用文字,而不是代码。好吧,我想实现规范所要求的——编写一个函数,将函数作为参数,并创建一个只能调用一次的版本。原始函数不应该任何参数。