JS 执行绪与同步 非同步 DAY50

这里额外补充2个观念

Not Defined VS undefined

Not Defined

console.log(a); //not defined//因为尚未配置记忆体空间

undefined

var a;console.log(a); //undefined//已配置记忆体空间,但尚未赋予值

另外,在开发上
要避免 undefined 赋予到一个变数上
undefined 是系统自动编配,并非给我们直接使用
若要使用空值在一个变数上,请用 null

// 要避免 undefined 赋予到一个变数上var a = undefined;// 若要使用空值在一个变数上,请用 nullvar b = null;

回收机制(Garbage collection)

这是有关于记忆体
在函式的执行环境中,会创造自己的记忆体
当它离开的时候,也会把记忆体释放
http://img2.58codes.com/2024/20123039Xm3h3qyKlg.png
MDN : https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Memory_Management


执行绪与同步、非同步
JS 属于一个 单执行绪(Single Thread) 的程式
单执行绪 主要是作业系统运行的概念
那它到底是什么呢??

// 皮杰先生 有3个任务 吃饭 洗澡 看电视// 单执行绪// 皮杰先生同时间只能做一件事情//多执行绪// 皮杰先生同时间能做多件事情

这时候应该会有人说
那 JS不是有 非同步吗
那它又是什么??

同步(Synchronous)与非同步(Asynchronous)

上述所提到的 单执行绪 是针对于系统的执行
非同步则是针对程式语言本身

同步
依序执行 不会因为还没吃完早餐就跳到洗碗盘
http://img2.58codes.com/2024/20123039Zb7SmlIYYE.jpg

非同步
非同步的任务(setTimeout)会往后放
那为什么它可以往后放呢???
请往下继续看啰~~
http://img2.58codes.com/2024/201230397LqKbJ9RzE.jpg


JS还是依据同步来执行程式码
只是非同步的行为会先移动到事件伫列
http://img2.58codes.com/2024/20123039lPXZWkxumH.jpg

所以这里的执行堆叠为

function eatBreakfast(){    console.log('吃早餐');}function callSomeone(name){    console.log('打给'+ name);    setTimeout(function(){        console.log(name + '回电');    },1000)    //这里就算设为 0 秒 ,一样会放到事件伫列}function washingPlate(){    console.log('洗盘子');}function doWork(){    var name = '小花'    eatBreakfast();    callSomeone(name);    washingPlate();}doWork();// doWork()// eatBreakfast()// callSomeone()// callSomeone()里的setTimeout先放到事件伫列// washingPlate()// 程式码执行完// 再执行非同步行为

这里再举一个例子

function clickMe (){    console.log('成功');}var el = document.querySelector('p');el.addEventListener('click',clickMe,false)//这里会将 click行为 放到事件伫列//若有点击 才会执行

经典例子

for(var i = 0 ; i < 3 ;i++){    setTimeout(function(){        console.log(i); // 3 执行3次     },0)}// 每次执行迴圈 setTimeout被放到事件伫列 但不会先执行里面的函式// 等到 i === 3 迴圈不符合 才执行setTimeout// 这时候 i 为 3 (执行三次 因被放到事件伫列 3次)

上述例子
等我们介绍到 JS ES6 let 将会再次出现
答案会有所不同http://img2.58codes.com/2024/emoticon07.gif

那今天的介绍就到这里
若有任何问题 或 内容有误
请跟我说唷http://img2.58codes.com/2024/emoticon08.gif


关于作者: 网站小编

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

热门文章