2016-05-31 16 views
-1

我做练习,并根据时代的函数被调用的次数,不同的结果应该返回。如果函数例如被调用了0,1,2次,它应该返回一个数字(见下面),如果它被调用超过3次AND为奇数(称为3次,第三次调用=奇数),那么它应该返回返回一个字符串,等等。我知道我会怎么做,如果它只是调用一次或根本没有,但我无法弄清楚如何写奇数/偶数倍代码..多少次调用函数(偶/奇次数)

这一部分提供的,不应该被改变:

var plus = function (a,b) { 
    return a+b; 
} 
var func = sometimes(plus); 

var array = []; 

for(var i = 0; i < 8; i++){ 
    array.push(func(2+i,3+i)) //should return [7,9,11, 'no idea']  
} 

这是我写的功能,显然是错误的..

function sometimes (newFunc){ 
    var called = newFunc(); 
    if (called>4) { 
     return newFunc; 
    } 
} 
+1

http://www.w3schools.com/js/js_function_closures.asp –

+0

您正在使用一个变量'called'(可能更好地命名为'count'或'calledCount'或其他),但是将它初始化为由'newFunc()'返回的值。相反,你想要将该变量初始化为零,然后**返回一个函数**,在该函数内您执行检查并返回正确的值。 – 2016-05-31 05:27:11

+0

问题是我怎么能这样做,偶数次叫做? – juliascoding

回答

1

不知道这是否适合您的问题,但试试运行下面的代码片段。

var selfInvokeFunc = (function (func) { 
 
    var counter = 0; 
 
    return function (func) { 
 
     if (counter >= 3 && counter % 2 != 0) { 
 
      counter++; 
 
      return "'no idea'"; 
 
     } 
 
     else { 
 
      counter++; 
 
      return func; 
 
     } 
 
    } 
 
})(); 
 

 
var plus = function (a,b) { 
 
    return a+b; 
 
} 
 
var func = function (a, b) { 
 
    return selfInvokeFunc(plus(a+1,b+1)); 
 
} 
 

 
var array = []; 
 

 
for(var i = 0; i < 8; i++){ 
 
    array.push(func(2+i,3+i)); 
 
} 
 
alert(array); //should return [7,9,11,'no idea',15,'no idea',19,'no idea'] 
 
document.write(array);

应返回[7,9,11, '不知道',15 '不知道',19 '不知道']而

阵列[0 ] = 7,

阵列[1] = 9,

阵列[2] = 11,

阵列[3] = '不知道',//称为

阵列[4] = 15,

阵列[5] = '不知道',//奇

阵列[第三次6] = 19,

阵列[7] = '不知道' //奇

希望它回答您的问题。

+0

谢谢。你在这里说的时候,计数器=== 3然后不知道,但我需要做的所有ODD号码(不仅3,但也是5,7等),那是我不知道 - 如何包括数字%2 == 0在它 – juliascoding

+0

@ juliascoding改变(计数器%2!= 0)在你的情况下不起作用? – kolunar

+0

没有没有,给了我一个错误的输出.. – juliascoding