everycode
everycode copied to clipboard
2014年12月18日 D5
你记得那是一个影响你人生转折点的高考的早上,妈妈说要熬一个猪脑汤给你喝,因为吃啥补啥,喝完考试给力肯定棒。 偏偏这个时候你肚子很不舒服,妈妈站在厕所门口急得手足无措,于是顺手拿起了旁边一本《javascript权威指南》,简单翻阅后,便定义并执行了一个函数:
/**
* 返回一个新函数,该函数按定义的次数和间隔执行。
* @param {object} func 函数名称
* @param {number} times 次数
* @param {number} wait 间隔
* @return {function}
*/
function repeat (func, times, wait) {}
// 例如这样用
var repeatFun = repeat(alert, 10, 5000);
repeatFun('快出来吃猪脑汤啦!!'); // 会alert十次 '快出来吃猪脑汤啦!!',每次间隔5秒。
接着妈妈放心的去厨房做了一碗猪脑汤,听完第十次 “快出来吃猪脑汤啦!!” 后,你终于出来了,喝完汤,参加高考,你顺利得考上了期望的大学...
那么问题来了: 你还记得妈妈是怎么定义这个函数的吗?
return function(){ var str =arguments[0]; (function(a){ for(var i=0;i<times;i++){ setTimeout(function(){ func(a); },i*wait); } })(str);
}
function repeat (func, times, wait, this_) {
return function() {
var arg = arguments;
var c = setInterval(function() {
func.apply(this_ || window, arg);
if(--times === 0)
clearInterval(c);
}, wait);
}
}
/**
* 返回一个新函数,该函数按定义的次数和间隔执行。
* @param {object} func 函数名称
* @param {number} times 次数
* @param {number} wait 间隔
* @return {function}
*/
function repeat (func, times, wait) {
return function(params){
var count = 0;
var interval = window.setInterval(function(){
func.call(this, params);
count += 1;
if(count >= times){
window.clearInterval(interval);
}
}, wait);
};
}
// 例如这样用
var repeatFun = repeat(alert, 10, 5000);
repeatFun('快出来吃猪脑汤啦!!'); // 会alert十次 '快出来吃猪脑汤啦!!',每次间隔5秒。