setTimeout语法:

var timeoutId = scope.setTimeout(function[, delay, param1, param2....]);
var timeoutId = scope.setTimeout(function[, delay]);
var timeoutId = scope.setTimeout(code[, delay]);

setTimeout要点一:

setTimeout第一个参数可以是一个函数,也可以是一个包含Javascript代码的字符串(可以类比eval()中使用字符串)

//方式1:一般的书写方式
setTimeout(function(){console.log(a)
},1000)//方式2:也可以使用字符串
setTimeout("console.log(a)",1000);

不过,不推荐方式2,不论是代码可读性,还是MDN的官方解释-安全原因,亦或是在旧版浏览器中的性能原因~~。


setTimeout要点二:

Javascript是一个单线程的解释器,因此一段时间只能执行一段代码,所以会有Javascript任务队列,这些任务会按照它们队列的顺序执行。而setTimeout的第二个参数-delay告诉Javascript再过多久把当前任务添加到队列中。

如果省略该参数,delay取默认值0。实际的延迟时间可能会比 delay 值长【通常是由于函数嵌套导致(嵌套层级达到一定深度),或者是由于已经执行的setInterval的回调函数阻塞导致】。

根据HTML5 spec 中精确的数值,delay延迟时间大于等于4ms,即便你把delay设为0


setTimeout要点三:

setTimeout可选参数:附加参数,一旦定时器执行,它们会作为参数传递给function 或 执行字符串(setTimeout参数中的code)。

setTimeout(function(param1,param2){console.log(param1)   //aconsole.log(param2)   //b
},1000,'a','b')
function timeout(ms) {return new Promise((resolve, reject) => {setTimeout(resolve, ms, 'finish');});
}timeout(100).then((value) => {console.log(value);      //finish
});

setTimeout要点四:

setTimeout都是在全局作用域下执行的,因此函数中的this都是指向window对象(一般情况下,排除使用ES6中的箭头函数、Function.prototype.bind()、闭包重写作用链对象。。。。等等更改作用域的其他方式)

var obj = {timer:function(){setTimeout(function(){console.log(this == window)     //true})}
}
obj.timer()

虽然有不少的书上/文档中写着,严格模式下,this是undefined.

BUT,在严格模式下,setTimeout( )的回调函数里面的this仍然默认指向window对象, 并不是undefined

"use strict";
setTimeout(function(){console.log(this == window)    //true
})

setTimeout()中容易忽视的要点相关推荐

  1. 关于setInterval和setTImeout中的this指向问题

    问题描述 前些天在练习写一个小例子的时候用到了定时器,发现在setInterval和setTimeout中传入函数时,函数中的this会指向window对象,如下例: var num = 0; fun ...

  2. 用计算机处理公文,2016年事业单位考试指导:计算机公文处理中的流程及要点...

    计算机公文处理中的流程及要点 一.收文处理 收文登记. 收文扫描后进入公文处理系统. 拟办.由办公室专人处理,填写拟办意见转交收发人员信箱. 批办.局领导阅批文件在个人信箱中处理,在阅批并签名后转回办 ...

  3. 嵌入式开发中C语言编程要点简述!

    在嵌入式Linux的C语言开发中,C语言的基本编程依然是最重要的内容.除此之外,与一般的C语言编程相比,嵌入式Linux的C语言编程有以下一些要点: 1.库函数与系统调用 在进行C语言编程的时候,使用 ...

  4. 人工智能ai 学习_人工智能中强化学习的要点

    人工智能ai 学习 As discussed earlier, in Reinforcement Learning, the agent takes decisions in order to att ...

  5. 【一图看全】北京新基建行动方案中的30大要点

    转自:行业研究报告 6月10日,北京市印发<北京市加快新型基础设施建设行动方案(2020-2022年)>(以下简称"行动方案"),其中提出聚焦"新网络.新要素 ...

  6. c语言游戏人物结构buff,浅谈游戏中BUFF的设计要点

    from http://www.gameres.com/msg_225241.html 其实这类帖子并没有多少的设计理论,对于策划的提升和帮助也并不大,原因其实在于其适用性太窄,当我要设计XX象棋的时 ...

  7. UI产品设计流程中的14个要点

    自从我在 Dribbble 上贴了一幅我的产品设计成果,受到了大家伙热烈的反馈,对此我深受鼓励,我决定写下这篇文章,用来记录我这两年里作为产品设计师,所学到的东西.说起来有点惭愧,这几年我一直都在使用 ...

  8. python中使用函数编程的意义_总结Python编程中函数的使用要点

    为何使用函数 最大化代码的重用和最小化代码冗余 流程的分解 编写函数 >>def语句 在Python中创建一个函数是通过def关键字进行的,def语句将创建一个函数对象并将其赋值给一个变量 ...

  9. 编程软件python中的if用法-总结Python编程中函数的使用要点

    为何使用函数 最大化代码的重用和最小化代码冗余 流程的分解 编写函数 >>def语句 在Python中创建一个函数是通过def关键字进行的,def语句将创建一个函数对象并将其赋值给一个变量 ...

最新文章

  1. Transform-style和Perspective属性
  2. Pylearn2之YAML
  3. Stanford UFLDL教程 微调多层自编码算法
  4. SQL:给查询添加一个合计行
  5. Java API —— Map接口
  6. C++中this指针的用法详解
  7. 【Linux】用户与权限
  8. 抖音一个老人和一个机器人歌曲_一个老人孤独去世,一个老人安然离世
  9. 三段式状态机_Verilog实战篇(5)——FIFO amp; 状态机
  10. 1小时搞懂设计模式之委派模式
  11. 如何测试并调试基于 NDK 的 Android 应用
  12. PHP安全之Web攻击
  13. 什么是pytorch(3神经网络)(翻译)
  14. netcore codefirst生成数据库命令
  15. WebService案例实例
  16. 关于VirtualBox运行出现“0x00000000指令引用的0x00000000内存。该内存不能为written”的解决方法
  17. 如何更改IE窗口初始大小及位置
  18. 在遗忘边缘试探的matlab函数
  19. 【光学】(一) 光阑、光瞳
  20. 【笔记】封神榜游戏设计VR

热门文章

  1. python中的元组、元组和列表的区别
  2. 福利!100多条Qt开发常见问题及解决方法汇总!很长建议先收藏
  3. STM32的ITM跟踪调试功能介绍及实现(一)KEIL篇
  4. UI设计师进行扁平化设计时需要注意的4个方面!
  5. 探讨数字人最真实与最有价值的应用场景|BOOK DAO 第二期共建
  6. linux 查询文件大小大于1g_linux常用基础命令(4)
  7. 抑郁症会发展成精神分裂症?这些真相越早知道越好!
  8. 去北大聆听比尔盖茨精彩演讲,感受创新中国未来
  9. HTML(1)大体框架
  10. 运维经典面试真题汇总系列