js里的两个内置函数:setInterval()与setTimeout()提供了定时的功能,前者是每隔几秒执行一次,后者是延迟一段时间执行一次。javascript 是一个单线程环境,定时并不是很准,遇到阻塞的操作会延迟,代码:

<script>
var fn = function(){
alert("fn()函数被执行了");
} setInterval(fn,1000);
</script>

  

以上代码会每隔一分钟弹窗,如果不关闭弹窗。Js不会在下一秒执行这个函数。也就说,被阻塞了。

除了setInterval()实现函数重复执行外,还可以用setTimeout()实现函数重复执行。是这么做的:

<script>
var fn = function(){
alert("fn()函数被执行了");
setTimeout(fn, 1000)
} fn();
</script>

  

代码中用setTimeout()调用自身。这样函数执行一次,会一直延迟一段时间调用自身,实现了函数重复执行,是不是觉得很妙?看过许多网页上用到的jquery倒计时插件,都是用setTimeout()来重复执行函数。

setTimeout()执行顺序有个坑,看下面的代码,你觉得控制台输出的结果是什么:

<script>
setTimeout(function() {
console.log(1);
}, 0);
console.log(2);
</script>

  

答案是先输出2,再输出1。这跟我们的直觉是不一致的。当事件队列为空的时候,才执行SetTimeout()里面的代码。

回到前面,js定时不准的问题,看到一篇靠谱的博客,用的是setTimeout()这种。可以参考后续博客,点下面的链接:

前端倒计时不准的问题

js-循环执行一个函数的更多相关文章

  1. ----关于统计字符出现次数的JS循环以及indesxOf函数----

    以下将会通过JS循环判断字符“banana”出现次数 以及调用indexOf中的函数来实现统计   <!DOCTYPE html> <html> <body> &l ...

  2. js 自执行匿名函数(转载)

    自执行匿名函数: 常见格式:(function() { /* code */ })(); 解释:包围函数(function(){})的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命 ...

  3. JS如何重写一个函数

    分享一些自己在开发上遇到的问题,比如我们页面上用了大量的打印语句,但是在某些时候,我们不想要了. 解决方案1 : 我们删除这里的代码,如果太多了,那工作量太大好累,想想都不想干 解决方案2 :我们将c ...

  4. JS自执行匿名函数

    常见格式:(function() { /* code */ })(); 解释:包围函数(function(){})的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命名函数,括号内为匿 ...

  5. JS 立即执行的函数表达式(function)写法

    1. 正确的写法 对于JavaScript 来说,括弧()里面不能包含语句,所以在这一点上,解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function ...

  6. js循环复制一个div

    <html> <head> <title>Test of cloneNode Method</title> <script type=" ...

  7. pytest--fixure前置执行一个函数

    import pytest@pytest.fixture()def login_r(): print('登陆') @pytest.fixture()def open_browser(): print( ...

  8. 用JS 循环做一个表格

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. [转载]js 程序执行与顺序实现详解

    http://www.jb51.net/article/36755.htm JavaScript是一种描述型脚本语言,由浏览器进行动态的解析与执行,浏览器对于不同的方式有不同的解析顺序,详细介绍如下, ...

随机推荐

  1. [luoguP1993] 小 K 的农场(差分约束 + spfa 判断负环)

    传送门 差分约束系统..找负环用spfa就行 ——代码 #include <cstdio> #include <cstring> #include <iostream&g ...

  2. js for循环中的var与let

    var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); 上面代码 ...

  3. kendo Grid的toolbar自定义

    由于这个toolbar官方进增加了create,save还有一个是_____ 所以想要自定义话就需要使用 下面的代码(这个是MVVM模式) data-toolbar='[{ template: Ken ...

  4. ORA-12547错误

    http://www.linuxidc.com/Linux/2013-03/81330p3.htm << good http://www.verydemo.com/demo_c158_i6 ...

  5. POJ 2960

    也算是一道模板题吧,只需按照SG函数的定义求出每个值的SG,然后异或就可以了. #include <iostream> #include <cstdio> #include & ...

  6. POJ 3344 &amp; HDU 2414 Chessboard Dance(模拟)

    题目链接: PKU:http://poj.org/problem? id=3344 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2414 Descrip ...

  7. Unix网络编程 高级IO套接字设置超时

    我们知道.对于一个套接字的读写(read/write)操作默认是堵塞的.假设当前套接字还不可读/写,那么这个操作会一直堵塞下去,这样对于一个须要高性能的server来说,是不能接受的.所以,我们能够在 ...

  8. C#遍历DataSet与DataSet元素实现代码

    C#中的Dataset就像一个数据库,有多个表(Table),一般只有一个表,然后每个表中有行(DataRow)和列(DataColumn),DataRow[DataColumn]可以得到某行某列数据 ...

  9. 【POJ 3635】 Full Tank

    [题目链接] http://poj.org/problem?id=3635 [算法] 优先队列BFS 实现类似于堆优化dijkstra [代码] #include <algorithm> ...

  10. 两个向量之间的欧式距离及radial-basis-functions(RBF)

    template <class DataType1, class DataType2>double EuclideanDistance(std::vector<DataType1&g ...