setTimeout那些事儿】的更多相关文章

一.setTimeout那些事儿之单线程 一直以来,大家都在说Javascript是单线程,浏览器无论在什么时候,都且只有一个线程在运行JavaScript程序. 但是,不知道大家有疑问没——就是我们在编程过程中的setTimeout(类似的还有setInterval.Ajax),不是异步执行的吗?!! 例如: <!DOCTYPE html> <head> <title>setTimeout</title> <meta http-equiv="…
一.前言 JavaScript是单线程的,固,一次只能执行一个任务,当有一个任务耗时很长时,后面的任务就必须等待.那么,有什么办法,可以解决这类问题呢?(抛开WebWorker不谈),那就是让代码异步执行嘛.什么意思,如Ajax异步请求时,就是通过不断监听readyState的值,以确定执行指定的回调函数. 通常的异步执行有三种,回调函数.事件监听以及发布订阅,其中事件监听和发布订阅其实差不多,只是后者更加健壮一些. 如回调函数,回调函数是应用在异步执行中最简单的编程思想.如下: functio…
一.call&apply call, apply都属于Function.prototype的方法,因为属于Function.prototype,所以每个Function对象实例,也就是每个方法都有call, apply属性啦. 如果不明白,请见“Javascript之一切皆为对象3”. 而且它们的作用都是一样的,只是使用方式不同而已. 作用:借用别人的方法来调用,就像自己有这个方法一样. 咦,那它们怎样才能达到这目的呢? 对象. 对象? 是的,其实就是改变执行上下文对象的内部指针,因为在Java…
一.webWorker之初体验 在"setTimeout那些事儿"中,说到JavaScript是单线程.也就是同一时间只能做同一事情. 也好理解,作为浏览器脚本语言,如果JavaScript不是单线程,那么就有点棘手了.比如,与用户交互或者对DOM进行操作时,在一个线程上修改某个DOM,另外的线程删除DOM,这时浏览器该如何抉择呢? 所以,JavaScript是单线程也是有背景的. 如下: <!DOCTYPE html> <head> <title>…
一.webWorker之初体验 在"setTimeout那些事儿"中,说到JavaScript是单线程.也就是同一时间只能做同一事情. 也好理解,作为浏览器脚本语言,如果JavaScript不是单线程,那么就有点棘手了.比如,与用户交互或者对DOM进行操作时,在一个线程上修改某个DOM,另外的线程删除DOM,这时浏览器该如何抉择呢? 所以,JavaScript是单线程也是有背景的. 如下: <!DOCTYPE html> <head> <title>…
document.querySelector('#settimeout').onclick= function () { setTimeout(function () { console.log('test settimeout'); },); } setTimeout 是延迟执行,它内部应该有一个队列结构,也就是当我们再1s内狂点100下按钮时候,上面的函数虽然会1执行以下,但这100下都会执行完,这会涉及到一个问题 比如当我们有一个小的图片,鼠标放上去时候就再1s后浮动显示出大图片,当鼠标移…
精准问题 setTimeout的问题在于它并不是精准的,例如使用setTimeout设定一个任务在10ms后执行,但是在9ms后,有一个任务占用了5ms的cpu时间片,再次轮到定时器执行时,时间已经过期了4ms,那么是不是说setInterval就是准确的呢? 然而并不是,setInterval存在两个问题: 时间间隔可能会跳过 时间间隔可能小于定时器设定的时间 请看以下代码: function click() { // code block1... setInterval(function()…
ES5和ES6那些你必须知道的事儿 ES6新增的东西 一.块级作用域:关键字let,常量const let与var的区别: a.不会进行变量声明提升 b.变量不允许被重复定义 c.变量不允许被删除 d.在for循环中可以保留i的值 e.循环的变量只能在当前块级作用域中使用 const和var的区别: a.常用于声明常量时或声明不可被修改的变量的时候 b.const的值不允许被修改 c.不会进行变量声明提升 d.常量不允许被删除 二.对象字面量属性赋值简写 var name = “我是name”:…
util.promisify是在node.js 8.x版本中新增的一个工具,用于将老式的Error first callback转换为Promise对象,让老项目改造变得更为轻松. 在官方推出这个工具之前,民间已经有很多类似的工具了,比如es6-promisify.thenify.bluebird.promisify. 以及很多其他优秀的工具,都是实现了这样的功能,帮助我们在处理老项目的时候,不必费神将各种代码使用Promise再重新实现一遍. 工具实现的大致思路 首先要解释一下这种工具大致的实…
今天看到这样一道面试题: //请写出输出内容 async function async1() { console.log('async1 start'); await async2(); console.log('async1 end'); } async function async2() { console.log('async2'); } console.log('script start'); setTimeout(function() { console.log('setTimeout…