setTimeout()中容易忽视的要点
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()中容易忽视的要点相关推荐
- 关于setInterval和setTImeout中的this指向问题
问题描述 前些天在练习写一个小例子的时候用到了定时器,发现在setInterval和setTimeout中传入函数时,函数中的this会指向window对象,如下例: var num = 0; fun ...
- 用计算机处理公文,2016年事业单位考试指导:计算机公文处理中的流程及要点...
计算机公文处理中的流程及要点 一.收文处理 收文登记. 收文扫描后进入公文处理系统. 拟办.由办公室专人处理,填写拟办意见转交收发人员信箱. 批办.局领导阅批文件在个人信箱中处理,在阅批并签名后转回办 ...
- 嵌入式开发中C语言编程要点简述!
在嵌入式Linux的C语言开发中,C语言的基本编程依然是最重要的内容.除此之外,与一般的C语言编程相比,嵌入式Linux的C语言编程有以下一些要点: 1.库函数与系统调用 在进行C语言编程的时候,使用 ...
- 人工智能ai 学习_人工智能中强化学习的要点
人工智能ai 学习 As discussed earlier, in Reinforcement Learning, the agent takes decisions in order to att ...
- 【一图看全】北京新基建行动方案中的30大要点
转自:行业研究报告 6月10日,北京市印发<北京市加快新型基础设施建设行动方案(2020-2022年)>(以下简称"行动方案"),其中提出聚焦"新网络.新要素 ...
- c语言游戏人物结构buff,浅谈游戏中BUFF的设计要点
from http://www.gameres.com/msg_225241.html 其实这类帖子并没有多少的设计理论,对于策划的提升和帮助也并不大,原因其实在于其适用性太窄,当我要设计XX象棋的时 ...
- UI产品设计流程中的14个要点
自从我在 Dribbble 上贴了一幅我的产品设计成果,受到了大家伙热烈的反馈,对此我深受鼓励,我决定写下这篇文章,用来记录我这两年里作为产品设计师,所学到的东西.说起来有点惭愧,这几年我一直都在使用 ...
- python中使用函数编程的意义_总结Python编程中函数的使用要点
为何使用函数 最大化代码的重用和最小化代码冗余 流程的分解 编写函数 >>def语句 在Python中创建一个函数是通过def关键字进行的,def语句将创建一个函数对象并将其赋值给一个变量 ...
- 编程软件python中的if用法-总结Python编程中函数的使用要点
为何使用函数 最大化代码的重用和最小化代码冗余 流程的分解 编写函数 >>def语句 在Python中创建一个函数是通过def关键字进行的,def语句将创建一个函数对象并将其赋值给一个变量 ...
最新文章
- Transform-style和Perspective属性
- Pylearn2之YAML
- Stanford UFLDL教程 微调多层自编码算法
- SQL:给查询添加一个合计行
- Java API —— Map接口
- C++中this指针的用法详解
- 【Linux】用户与权限
- 抖音一个老人和一个机器人歌曲_一个老人孤独去世,一个老人安然离世
- 三段式状态机_Verilog实战篇(5)——FIFO amp; 状态机
- 1小时搞懂设计模式之委派模式
- 如何测试并调试基于 NDK 的 Android 应用
- PHP安全之Web攻击
- 什么是pytorch(3神经网络)(翻译)
- netcore codefirst生成数据库命令
- WebService案例实例
- 关于VirtualBox运行出现“0x00000000指令引用的0x00000000内存。该内存不能为written”的解决方法
- 如何更改IE窗口初始大小及位置
- 在遗忘边缘试探的matlab函数
- 【光学】(一) 光阑、光瞳
- 【笔记】封神榜游戏设计VR