美文网首页
for循环,定时器,闭包混合一块的那点事。

for循环,定时器,闭包混合一块的那点事。

作者: 萤火虫de梦 | 来源:发表于2017-11-14 17:02 被阅读32次

1,对于一个基本的for循环,顺序输出变量值。

for(var i = 1; i < 4; i++){
            console.log(i);//结果不多说了吧
        }

2,如果for循环中有定时器,如下代码。

for (var i = 1; i < 4; i++) {
            setTimeout(function() {
                console.log(i);//3个4
            }, 3000);
        }

初衷想要3s后输出1,2,3。但是3s后,输出3个4。原因是定时器的异步执行,for循环的执行速度很快,当真正执行到函数体时,此时i早已变成4,所以结果不想而知。

3,如果要得到正确结果,就要引入闭包来保存变量i不被销毁。

 for (var i = 1; i < 4; i++) {
            (function(a) {
                setTimeout(function() {
                    console.log(a);//操纵变量a,和i无关
                }, 3000);
            })(i)
        }

这样引入闭包,变量i保存下来,3s后函数体执行,输出1,2,3.

也可以这样写

 for (var i = 1; i < 4; i++) {
             setTimeout(fn(i), 3000);
         }
         function fn(a){
             return function(){
                 console.log(a);
             }
         }

4,如果要实现,没隔3s输出一个数字,即,3s输出1,3s后再输出2...,就要对定时器时间设置

for (var i = 1; i < 4; i++) {
            (function(a) {
                setTimeout(function() {
                    console.log(a);
                }, a*3000); //.....
            })(i)
        }

实际上,for循环很快,上述代码类似于同时启动3个定时器,只需要确保时间不一样即可。在此,时间分别是3s,6s,9s,由于同时启动,但是执行时间不同,各个时间间隔都是3s。巧妙地达到了目的。

相关文章

  • for循环,定时器,闭包混合一块的那点事。

    1,对于一个基本的for循环,顺序输出变量值。 2,如果for循环中有定时器,如下代码。 初衷想要3s后输出1,2...

  • 前端(数组,闭包,定时器)

    数组 定时器 定时器弹框 定时器的基本用法 定时器动画 闭包 闭包存循环的索引值 闭包做私有变量计数器 闭包做选项卡

  • 2018-12-08

    定时器的基本用法 定时器动画 时钟 倒计时 变量的作用域 封闭函数 用变量的方式定义函数 闭包 闭包存循环的索引值

  • 前端(十四)

    1.循环语句 2.数组去重 3.字符串反转 4.定时器的基本用法 5.定时器动画 6.时钟 7.闭包 8.闭包存循...

  • swift-闭包

    闭包 闭包定义 闭包简化 - 尾随闭包 闭包参数 闭包返回值 闭包的循环引用

  • Swift入门二(对象函数)

    函数 闭包 GCD 尾随闭包 闭包循环引用解决(OC) 闭包循环引用解决(swift推荐) 面向对象 命名空间: ...

  • 循环 定时器 函数 闭包

    1. 条件分支语句 2. 数组 3. 获取标签过去元素 4. 循环语句4.1 for 循环4.2 while循环4...

  • iOS闭包循环引用精讲

    iOS闭包循环引用精讲 iOS闭包循环引用精讲

  • 前端基础(问答15)

    keywords: 闭包、定时器。 什么是闭包? 有什么作用 内层函数调用外层函数的变量,该内层函数即为闭包。本质...

  • 视频课程-循环中调用异步方法

    课程目录一个普通的for循环里面log一下 ifor循环中有一个定时器使用闭包真实实作使用ES6setTimeou...

网友评论

      本文标题:for循环,定时器,闭包混合一块的那点事。

      本文链接:https://www.haomeiwen.com/subject/mvyfvxtx.html