Javascript 执行环境、作用域 - 执行绪与同步、非同步

function eatBreakfast () {  console.log('吃早餐');}function washingPlate () {  console.log('洗餐盘');}function callSomeone (someone) {  console.log('打给' + someone);    setTimeout(function () {      console.log(someone + '回电');  }, 3000);}function doWork () {  var auntie = '水阿姨';  eatBreakfast();  callSomeone(auntie);  washingPlate();}doWork();

上面这个範例可以一次了解到执行绪与同步、非同步的概念

让我们来解析一下他的程式码吧:

Javascript 是单执行绪的程式

单执行绪 是一种作业系统的运行概念,一次只能做一件事。

http://img2.58codes.com/2024/20140506YUA40Z1kaC.png

如图所示,小明一次只能做一件事,等到做完以后才能按照顺序做下一件事。

相对的,多执行绪 的概念就是可以同时执行上述的三件事情

但可以看到 打给漂亮阿姨 这段有 setTimeout 的非同步事件

单执行绪 > 系统地执行非同步 > 针对程式语言的本身

Javascript 同步、非同步

非同步的任务会先移动到 事件伫列(Event Queue) 中,等到所有的同步事件执行完之后,才会执行非同步。

这里我们使用执行堆叠的概念来看一下这段程式码的运作方式

http://img2.58codes.com/2024/20140506QQv47BBqpt.png
http://img2.58codes.com/2024/201405064PBvAyFrVT.png

非同步事件整理

setTimeout 只会执行一次就结束setInterval 会在间隔固定的时间不断重複

使用者触发的行为也算是非同步事件:

<body><p>点我</p><script>    function clickThis () {        console.log('click');    }    var dom = document.querySelector('p');    dom.addEventListener('click', clickThis, false);</script>  </body>

除了使用者互动之外,还有三件事会用到非同步:

网路请求 (eg. ajax)档案系统操作 (读取/ 写入档案等)会故意延迟时间的功能 (eg. 闹钟)

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章