var foo = function(){alert('called!')};
time(foo,2);
foo();//弹出called
foo();//弹出called
foo();//do nothing
time 的第一个参数是传入一个函数 第二参数是函数执行的次数 就是如何控制传入的函数的执行次数?
var foo = function(){alert('called!')};
time(foo,2);
foo();//弹出called
foo();//弹出called
foo();//do nothing
time 的第一个参数是传入一个函数 第二参数是函数执行的次数 就是如何控制传入的函数的执行次数?
var foo = (function (){
var i = 0;
return function (){
if (i <2) alert ('called');
i++;
}
})();
手机敲的,意思到了就行
不返回新的函数的话
var foo = function () {
console.log('old');
};
time(foo, 2);
foo();//弹出called
foo();//弹出called
foo();//do nothing
function time(foo, times) {
return window.foo = function () {
if (times-- > 0) {
foo();
}
else
return;
};
}
估计不对,坐求正解,大神轻喷
var foo = function(){alert('called!')};
function time(foo,count)
{
for (var i = 0; i < count; i++) {
foo();
}
}
time(foo, 2);
foo();//弹出called
foo();//弹出called
foo();//do nothing
如果要包装的是函数,而不是匿名函数表达式,并且需要改变原函数,可以下面这么写
function foo() {
alert('called!');
}
var getFnName = function(callee) {
return callee.name || callee.toString().match(/function\s*([^(]*)\(/)[1];
};
var time = function(fn, times) {
var origin = fn,
tick = 0;
window[getFnName(fn)] = function() {
if(tick < times) {
origin.apply(this, arguments);
tick++;
}
};
};
time(foo, 2);
foo();
foo();
foo();
but,其他情况就像@小_秦 说的,实现不了而且这也不是一个好的解决方案。
DON'T reinvent your own bicycle!underscorejs
's before function is exactly what you are looking for. here's source code: link
_.before = function(times, func) {
var memo;
return function() {
if (--times > 0) {
memo = func.apply(this, arguments);
}
if (times <= 1) func = null;
return memo;
};
};
经提醒,发现是我理解错了。现在有点忙,有时间再看看。问题关注中~
我怎么就看不懂楼上这些童鞋码代码的时候心里在想啥呢?明明很简单的东西,弄的这么复杂。
function time(fn, count) {
fn();
count --;
if (!count) return;
time(fn, count);
}测试传送门:runjs
根本不需要创建新的Function
对象,也不需要暴露在window
下,
就这么一个简单的递归
就可以做到了,代码逻辑也根本一点不复杂。
而且我这只是单纯的把题主的需求翻译
成代码而已。
真不知道楼上各位大神咋想的。。
var foo = function() { alert('called'); };
function time(fn,count) {
foo = function(){
if(count-- > 0) {
fn(this);
}
};
}
time(foo,2);
foo();//called
foo();//called
foo();//do nothing
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答875 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决