• javaScript定时器


    定时器有两种:

    • setTimeout(只执行一次)
             setTimeout(function(){},1000);
    • setInterval(每隔一段时间重复执行)
             setInterval(function(){},1000);

    清除定时器:

    - clearTimeout()
            ```
                var i = 0;
                var timer = setInterval(function(){
                    //console.log('***'+timer);
                    i++;
                    if(i == 5){
        -clearInterval(1);  //清除定时器传入参数是代表定时器的那个数字

    -clearInterval(timer); //一般设置定时器时用变量接收一下,清除时传入变量名 } console.log(i); },1000); ``` - clearInterval() - 这两个方法技术上都可以清除两种定时器,但是为了区分,应该对应起来用

    定时器的异步:

    定时器是js中的一种异步机制,永远会在同步代码执行后运行

                setTimeout(function(){
                    console.log(111);
                },0)
                console.log(222);
                //先输出222,再输出111

    有关定时器的题目:

    运行结果是什么?      
    for (var i = 0; i < 5; i++) { setTimeout(function () { console.log(i); }, 0); }
    代码会输出 5 5 5 5 5,当i = 0时,生成一个定时器,将回调插入到事件队列中,等待当前队列中无任务执行时立即执行,而此时for循环正在执行,所以回调被搁置。
    当for循环执行完成后,队列中存在着5个回调函数,他们的都将执行console.log(i)的操作,因为当前JS代码上中并没有使用块级作用域,所以i的值在for循环结束后一直为5,
    所以代码将输出5个5
    var obj = {
        msg: 'obj',
        shout: function () {
            alert(this.msg);
        },
        waitAndShout: function() {
            setTimeout(function () {
                this.shout();
            }, 0);    
        }
    };
    obj.waitAndShout();

    这道题涉及到定时器中的this指向window或全局对象,window中不存在shout方法,所以运行代码会报错
    修改方案如下:
    var obj = {
        msg: 'obj',
        shout: function () {
            alert(this.msg);
        },
        waitAndShout: function() {
            var self = this; // 这里将this赋给一个变量
            setTimeout(function () {
                self.shout();
            }, 0);    
        }
    };
    obj.waitAndShout();
     
  • 相关阅读:
    专业的户外直播视频传输系统是如何搭建起来的?通过GB28181协议建立的户外直播方案
    Go-注释
    语言的动态性和静态性
    程序&命名-执行环境
    Go-错误栈信息
    Mongo-文档主键-ObjectId
    Mongo-关系型VS非关系型
    数据-CRUD
    Mongo基本操作
    mongo环境搭建
  • 原文地址:https://www.cnblogs.com/musong-out/p/11397163.html
Copyright © 2020-2023  润新知