1.setTimeout的第三个及更多的参数chrome
//定时器启动时候,第三个之后的参数是做为第一个func()的参数传进去。 function timeout(ms) { return new Promise((resolve, reject) => { setTimeout(resolve, ms, "我是setTimeout的第三个参数,将做为setTimeout的第一个参数的参数传递进去") }) } timeout(3000).then((value) => { console.log(value)//"我是setTimeout的第三个参数,将做为setTimeout的第一个参数的参数传递进去" }) function sum(x, y) { console.log(x+y) //4 } setTimeout(sum, 1000, 1, 3);
2.setTimeout(function, 0) 发生了什么
解释setTimeout(function, 0) 这个经常使用的“奇技淫巧”很简单,就是为了将function里的任务异步执行,0不表明当即执行,而是将任务推到消息队列的最后,再由主线程的事件循环去调用它执行。HTML5 中规定setTimeout 的最小时间不是0ms,而是4ms
。事实上,setTimeout有一个最小执行时间,当指定的时间小于该时间时,浏览器会用最小容许的时间做为setTimeout的时间间隔,也就是说即便咱们把setTimeout的毫秒数设置为0,被调用的程序也没有立刻启动。这个最小的时间间隔是多少呢?这和浏览器及操做系统有关。浏览器
1.HTML5标准规定
setTimeout的最短期间隔是4毫秒;
setInterval的最短间隔时间是10毫秒,也就是说,小于10毫秒的时间间隔会被调整到10毫秒
书和MDC2.在John Resig的新书《Javascript忍者的秘密》一书中提到
Browsers all have a 10ms minimum delay on OSX and a(approximately)
15ms delay on Windows. 在苹果机上的最小时间间隔是10毫秒,
在Windows系统上的最小时间间隔大约是15毫秒。
MDC中关于setTimeout的介绍中也提到,Firefox中定义的最小时间间隔(DOM_MIN_TIMEOUT_VALUE)是10毫秒,HTML5定义的最小时间间隔是4毫秒。app3.大多数电脑显示器的刷新频率是60HZ,大概至关于每秒钟重绘60次。所以,最平滑的动画效的最佳循环间隔是1000ms/60,约等于16.6ms。
为了节电,对于那些不处于当前窗口的页面,浏览器会将时间间隔扩大到1000毫秒。
另外,若是笔记本电脑处于电池供电状态,Chrome和IE9以上的版本,会将时间间隔切换到系统定时器,大约是16.6毫秒。异步
目前,经在firefox和chrome里的测试,发现firefox识别的最小时间间隔是0,chrome识别的最小时间间隔是1,看一下demo:测试
setTimeout(function() { console.log(2) }, 2) setTimeout(function() { console.log(1) }, 1) setTimeout(function() { console.log(0) }, 0)
chrome:动画
firefox:spa
看下面的事例。操作系统
1.<script>引用外部js文件时,必须是<script ...></script>标记格式,不要采起省略形式。firefox
2.在引用多个外部js文件时,省略了</script>将影响到该行下一行的脚本文件,即下一行脚本代码不能被引用。线程