• setTimeOut与循环闭包问题


    function a() {
        for(let i=0;i<=5;i++){
            setTimeout(function () {
                console.log(i)
            },i*1000);
        } 
    }
    a();
    

      结果:0 1 2 3 4 5    结果每间隔1S输出

     setTimeOut第二个参数设定xxms后执行,第一的参数是xxms后执行什么动作。

    队列的数据结构特点:

    这个队列的执行时间,需要等到函数调用栈清空后才开始执行,即所有的可执行代码执行完毕后才开始执行由setTimeOut定义的操作,这些操作进入队列的顺序,由设定的延迟时间来决定。

    setTimeout(function () {
        console.log("w");
    },0);
    console.log("q");
    

      结果: q   w  

    匿名函数:

    (function () {
        console.log("w")
    })()
    

      会立刻执行,执行后内存会清空这个函数。

    setTimeout(function () {
        console.log(a);
    },0);
    
    (function () {
        console.log(b+"wwww");
    }) ()//1
    
    var a=20;
    var b=30;
    
    console.log(a);//2
    console.log(fn);//3
    
    (function () {
        console.log(b+"eee");
    }) ()//4
    
    function fn() {
        setTimeout(function () {
            console.log("settime 10")
        },10)
    }
    
    fn.toString=function () {
        return 30;
    }
    
    console.log(fn);//5
    
    setTimeout(function () {
        console.log("settimeout 20ms")
    },20);
    
    fn();
    
    (function () {
        console.log(b+"qqq");
    }) ()//6
    

      

    结果:

    undefinedwwww
    20
    [Function: fn]
    30eee
    { [Function: fn] toString: [Function] }
    30qqq
    20
    settime 10
    settimeout 20ms

    首先执行console.log()的内容,碰到匿名函数会立即执行,之后setTimeOut才会根据设定的时间进入队列,然后再依次执行。

  • 相关阅读:
    OpenCV基本函数学习
    OpenCV:概述、结构和内容
    NS2典型例子简单分析
    NS2仿真过程中需要的语言及基本组件
    洛谷 P2393 yyy loves Maths II
    洛谷 P1922 女仆咖啡厅桌游吧
    洛谷 P2559 [AHOI2002]哈利·波特与魔法石
    洛谷 P1301 魔鬼之城
    洛谷 P2383 狗哥玩木棒
    洛谷 P2298 Mzc和男家丁的游戏
  • 原文地址:https://www.cnblogs.com/lilight/p/7794615.html
Copyright © 2020-2023  润新知