前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >var repeatFunc=repeat(console.log,4,3000) repeatFunc('hellow world');//每个3秒打印1次hellow world,打印四次

var repeatFunc=repeat(console.log,4,3000) repeatFunc('hellow world');//每个3秒打印1次hellow world,打印四次

作者头像
刘嘿哈
发布2022-10-25 14:14:03
1160
发布2022-10-25 14:14:03
举报
文章被收录于专栏:js笔记

这是一个异步的处理加闭包的问题,setTimeout或者setInterval不可避免 方案1async/await+Promise+setTimeout+while

代码语言:javascript
复制
    function repeat(fn, num, delay) {
        return async function (str) {
            while (num) {
                await new Promise(res => {
                    setTimeout(function () {
                        fn(str);
                        num--;
                        res()
                    }, delay)
                })
            }
        }
    }
    var repeatFunc=repeat(console.log,4,3000);
    repeatFunc('hellow world')

方案2 setnterval+clearInterval

代码语言:javascript
复制
  function repeat(fn, num, delay) {
        return  function (str) {
            var timer=setInterval(function (params) {
                fn(str);
                num--;
                if(num===0){
                    clearInterval(timer)
                }
            },delay)
        }
    }
    var repeatFunc=repeat(console.log,4,3000);
    repeatFunc('hellow world')

方案3 setTimeout+fn

代码语言:javascript
复制
    function repeat(fn, num, delay) {
        return function (str) {
            function parint() {
                setTimeout(function () {
                    fn(str);
                    num--;
                    if (num > 0) {
                        parint();
                    }
                }, delay)
            }
            parint()
        }
    }
    var repeatFunc = repeat(console.log, 4, 3000);
    repeatFunc('hellow world')

方案4 setTimeout+for未考虑执行时间,不严谨

代码语言:javascript
复制
    function repeat(fn, num, delay) {
        return function (str) {
            var j = 1;
            for (let i=1;i<= num;i++) {
                setTimeout(function (params) {
                    fn(str)
                }, delay * i)
            }
        }
    }
    var repeatFunc = repeat(console.log, 4, 3000);
    repeatFunc('hellow world')
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档