everycode icon indicating copy to clipboard operation
everycode copied to clipboard

2014年12月18日 D5

Open think2011 opened this issue 11 years ago • 3 comments

你记得那是一个影响你人生转折点的高考的早上,妈妈说要熬一个猪脑汤给你喝,因为吃啥补啥,喝完考试给力肯定棒。 偏偏这个时候你肚子很不舒服,妈妈站在厕所门口急得手足无措,于是顺手拿起了旁边一本《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秒。

接着妈妈放心的去厨房做了一碗猪脑汤,听完第十次 “快出来吃猪脑汤啦!!” 后,你终于出来了,喝完汤,参加高考,你顺利得考上了期望的大学...

那么问题来了: 你还记得妈妈是怎么定义这个函数的吗?

think2011 avatar Dec 17 '14 16:12 think2011

return function(){ var str =arguments[0]; (function(a){ for(var i=0;i<times;i++){ setTimeout(function(){ func(a); },i*wait); } })(str);

    }

guojianlan avatar Dec 18 '14 05:12 guojianlan

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

businiaowa avatar Dec 18 '14 05:12 businiaowa

/**
 * 返回一个新函数,该函数按定义的次数和间隔执行。
 * @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秒。

Edward1992 avatar Dec 18 '14 14:12 Edward1992