Javascript的setTimeout函数让我重新审视了我对Javascript的了解。今天早些时候,我遇到了这样一个for循环:
我原本期望这段代码执行executeOtherCode函数,"休眠"5秒钟,并继续进行下一个迭代。然而,实际上我得到的结果是executeOtherCode同时执行了length次。
据我理解,setTimeout是一种异步的函数调用。这个理解正确吗?但是,如果我执行一个普通的函数,比如叫做hugeFunction(),需要执行1分钟才能返回,那么下面的代码行不会执行,对吗?那两者为什么不同呢?只是语言设计的选择吗?
我见过其他在jQuery中表现出类似异步方式的函数,比如getJSON。只要知道哪些函数被定义为异步的就可以了吗,还是有某种模式可以识别它们?如果有的话,是什么?
for (i = 0; i < length; i++) {
setTimeout(executeOtherCode, 5000)
}
我原本期望这段代码执行executeOtherCode函数,"休眠"5秒钟,并继续进行下一个迭代。然而,实际上我得到的结果是executeOtherCode同时执行了length次。
据我理解,setTimeout是一种异步的函数调用。这个理解正确吗?但是,如果我执行一个普通的函数,比如叫做hugeFunction(),需要执行1分钟才能返回,那么下面的代码行不会执行,对吗?那两者为什么不同呢?只是语言设计的选择吗?
我见过其他在jQuery中表现出类似异步方式的函数,比如getJSON。只要知道哪些函数被定义为异步的就可以了吗,还是有某种模式可以识别它们?如果有的话,是什么?
executeOtherCode()
排队等待在 5000ms 后被调用length
次,在此期间当前块继续执行。每个超时尽可能接近 5000ms 后启动,但不会在其他 JS 已经执行时启动,因此每个超时都一个接一个地执行,而不是同时执行,也不是多线程。只是因为每个超时之间没有明显的延迟,所以看起来是同时执行的。 - nnnnnn