2014-09-24 76 views
0

我是JS新手,想学习。该规范要求如下: 编写一个函数,该函数将另一个函数*作为参数并创建一次只能被调用一次的函数版本。重复调用修改的函数将不起作用,从原始调用返回值。你怎么能不使用闭包来做到这一点?它甚至有可能吗?你怎么能用闭包来做到这一点? *注意:这个原始输入功能不应该有任何参数。在Javascript中执行简单闭包时出现运行时错误

这是我有:

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()); 

我得到一个“意外令牌{”出错“返回FUNC(){”我不太明白我做错了什么?根据规范,我将divide()传递给mainFunc()并将其设置为参考变量输出。然后我多次调用divide()和output()来测试闭包是否工作,并且修改过的函数只发生一次。我错过了什么或不理解?

感谢您的帮助。

+0

回报FUNC(其结果){//这是一个语法错误,{是这里意外的标记 – 2014-09-24 19:37:20

+0

语法错误怎么样?我将divide()传递给mainFunc(),所以func()应该采用divide的属性,对吗? – rahul2001 2014-09-24 19:44:58

+0

如果你解释你想要达到的目标,或许它可能有所帮助。用语言,而不是代码。 – 2014-09-24 19:48:28

回答

0

在这里你去:

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函数返回