百度怎样建立网站链接,脚本语言在网站开发中,做物流网站的公司,甘肃锦华建设集团网站通常情况下 JavaScript 是单线程的#xff0c;一段 Js 程序的运行会占满整个程序进程#xff0c;我们通常会想方设法的通过异步编程来减少程序的阻塞#xff0c;那么我们今天反其道而行之#xff0c;看看通过怎么样正常的方式来阻塞 Js 运行。无限循环单线程的 JavaScript …通常情况下 JavaScript 是单线程的一段 Js 程序的运行会占满整个程序进程我们通常会想方设法的通过异步编程来减少程序的阻塞那么我们今天反其道而行之看看通过怎么样正常的方式来阻塞 Js 运行。无限循环单线程的 JavaScript 可以给我们灵感只要程序不断的计算就可以阻塞程序的进程function sleep(d){var t Date.now();while(Date.now() - t d);}function test() {console.log(sleep);sleep(10000);console.log(run);}test();但是这种方式其实是通过无限占用计算机的资源来造成假死状态它会消耗大量的 CPU并没有真正的让程序进程停止这种方式不可取。setTimeout我们直接用 setTimeout 回调的方式来阻断程序的进程当然它的确是没有让程序继续进行并且让 CPU 空闲下来但是这种写法并不是一种同步编程的方式function test() {console.log(sleep);setTimeout(function() {console.log(run);}, 10000)}awaitES 的高级版本出现了 Promise、await 等异步编程它们让程序的写法更佳的优雅简介同样也要借助于 setTimeout 来解决建议采用此方式function sleep(ms) {return new Promise(resolve setTimeout(resolve, ms));}async function test() {console.log(sleep);await sleep(10000);console.log(run);}test();generator yieldES6 的迭代器同样也具备异步编程能力但是这种写法相当晦涩建议少用function sleep(time) {setTimeout(function () {test.next();}, time);}function* gen() {console.log(sleep);yield sleep(10000);console.log(10 second later);}var test gen();test.next();其它还有一些借助于 Java Applet、Flash、请求服务端的 Sleep 服务甚至是 node 的 sleep 模块(底层也是调用 C 的 sleep)他们都不是非常纯正的通过 Js 语言本身的特性来处理当然是可以借鉴。总结上述方法总结下来就是两种一种是强行阻断式利用 Js 的单线程机制另一种就是借助 Js 的异步事件机制高级异步编程语法。当然我们在实际业务情况中使用阻断 JS 进程的地方非常少经常会通过 UI 来禁止用户继续操作这样的探索仅仅是搞清楚一些 Js 的基本原理有助于我们很好的了解它。