使用setTimeout实现setInterval、实现jsonp

1 使用setTimeout实现setInterval

setInterval的作用是每隔一段指定时间执行一个函数,但是这个执行不是真的到了时间立即执行,它真正的作用是每隔一段时间将事件加入事件队列中去,只有在当前执行栈为空的时候,才会从事件队列中取出事件执行。

使用setTimeout递归调用来模拟setInterval,就可以确保只有一个事件结束了,才会触发下一个定时器事件,这样解决了setInterval的问题。

实现思路是使用递归函数,不断地去执行setTimeout从而达到setInterval的效果。

function mySetInterval(fn, timeout) {
    let timer = { flag: true };

    function interval() {
        if (timer.flag) {
            fn();
        }
        setTimeout(interval, timeout);
    }
    setTimeout(interval, timeout);
    return timer;
}

2 实现jsonp

function addScript(src) {
    let script = document.createElement('script');
    script.src = src;
    script.type = 'text/javascript';
    document.body.appendChild(script);
}

function handleRes(res) {
    console.log(res);
}
addScript("http://xxx.xxx.com/xxx.js?callback=handleRes");

handleRes({ a: 1, b: 2 });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值