Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何返回函数被调用的次数?_Javascript - Fatal编程技术网

Javascript 如何返回函数被调用的次数?

Javascript 如何返回函数被调用的次数?,javascript,Javascript,我试图在函数被调用n次后返回一个值。以下是我目前掌握的情况: function spyOn(fn) { //takes in function as argument //returns function that can be called and behaves like argument var count = 0; var inner = function(){ count++; } inner.callCount = function(){return count}; }

我试图在函数被调用n次后返回一个值。以下是我目前掌握的情况:

function spyOn(fn) { //takes in function as argument
//returns function that can be called and behaves like argument
var count = 0;

var inner = function(){
  count++;
}

inner.callCount = function(){return count};

}
这就是我测试它的方式:

for (var i = 0; i < 99; i++) {
  spyOn();
}
for(变量i=0;i<99;i++){
间谍();
}

我觉得这是一个简单的问题,我应该能够简单地用谷歌搜索,但我还没有找到解决方案。谢谢

您可以做一些类似于拦截功能的事情

这是一个很小的版本,从现在开始你可以添加参数和必要的行为,最重要的是你的函数是如何被拦截器包装的,每次调用都会增加调用次数

功能间谍(fn){
var计数=0;
返回函数(){
fn();
计数++;
控制台日志(计数);
}
}
var myFunction=function(){
log(“调用!”);
};
var spy=spyOn(myFunction);
对于(变量i=0;i<99;i++){
间谍();

}
看起来您的
spyOn
函数应该接受一个函数
fn
作为参数,并返回一个函数(让我们称它为
internal
),该函数调用
fn
,参数
internal
,并返回
fn
返回的值:

const spiedCube=spyOn(立方体,函数(计数,结果){
如果(计数%3==0)
log(`Called${count}次。结果:${Result}`);
} );
for(设i=0;i<12;i++)
控制台日志(spiedCube(i));
//
函数间谍(fn,处理程序){
让计数=0;
返回函数内部(){
计数++;
const result=fn(…参数);
处理程序(计数、结果);
返回结果;
};
}
函数立方体(x){
返回x**3;

}
我看到的第一个问题是,您从未调用原始函数。您希望
spyOn
返回内部的
,这可能是重复的,然后把它用在loop@Bergi除非假设OP知道将返回的函数存储到变量中并使用它,而不是多次调用spyOn…@epascarello是的,这就是我所说的“在循环中使用[returned function]”的意思。然后是“行为类似于参数
fn
”…这也是我准备的答案,但你的答案更好,因为你认为是处理程序。不确定为什么在示例中使用
if(count%3==0)
可能会更简单。@RaphaMex我只需要一些常规输出来演示“Run code snippet”演示中处理程序的工作情况。它不打算被OP逐字使用。