js深入JS笔记

JSdeep(异步就是设闹钟)

2017-11-29  本文已影响17人  余生筑

看这里

如果我想设计这样一个函数sleep(time),该函数执行效果是令js引擎进入为期为time的睡眠,睡眠结束后再继续执行任务

但是由于JS引擎是单线程的,它是个勤奋的急性子:有什么任务分配给他他就一定要做完才休息。所以我们为了达到实现"睡眠"的目的,有两种方法

function sleep(seconds, fn){
    setTimeout(fn, seconds * 1000)
}
console.log(1)
sleep(3, ()=> console.log('wake up'))
function sleep(seconds){
    var start = new Date()
    while(new Date() - start < seconds * 1000){
    }
    return
}
console.log(1)
sleep(3)
console.log('wake up')
同步时序图
异步时序图

回到最开始,我们为什么要让js睡一会儿呢?其实这是无奈之举,js确实很勤劳,是个急性子,但当分配给它的任务需要某种资源,而这种资源又需要一段时间才能拿到时,我们就必须设置闹钟,资源到位后再把该项任务分配给js

let liList = document.querySelectorAll('li')
for(var i=0; i<liList.length; i++){
    liList[i].onclick = function(){
        console.log(i)
    }
}

关键:js识别i(判断i的值)是在闹钟响起前还是后?
不会看这里

上一篇 下一篇

猜你喜欢

热点阅读