js中关于执行的顺序及变量存放方式的一点记录
Markdown在线编辑器 - www.MdEditor.com
1 首先关于数据类型,有基本数据类型,和引用数据类型
基本数据类型有:number,string,boolean等;引用数据类型一般指object
栈:大小固定;堆:大小不固定;栈中存放一些基本的数据类型,和引用数据类型的地址;堆中存放引用数据类型的实际值。
造成问题,当两个变量指向同一个地址时,引起数据的同步修改
<script>
window.onload =function(){
var arr1 =[1,2,3,4,5];
//浅拷贝
var arr2 = arr1;
arr2[2]=100;
console.log(arr1);//[ 1, 2, 100, 4, 5 ]
console.log(arr2);//[ 1, 2, 100, 4, 5 ]
//深拷贝
var arr3 =[];
for(let i in arr1){
arr3[i]= arr1[i];
}
arr3[2]=555;
console.log(arr1);//[ 1, 2, 100, 4, 5 ]
console.log(arr3);//[ 1, 2, 555, 4, 5 ]
}
</script>
2 js是单线程的语言,只有一个执行的进程,在解析执行js文件的时候,对一些造成异步的函数,会将该处理事件放入宏任务待执行队列,和微任务待执行队列
宏任务与微任务的执行顺序是,执行一个宏任务后,执行所有的微任务,在接着执行宏任务
宏任务:setTimeout,setInterval等;微任务:Promise.then catch finally;process.nextTick;等
<script>
window.onload =function(){
setTimeout(()=>{
console.log('1级宏事件1');
newPromise((resolve)=>{ resolve()})
.then(()=>{
console.log('2级微事件3');
})
});
console.log('主事件1');
newPromise((resolve)=>{
console.log('主事件2');
resolve()
}).then(()=>{
console.log('1级微事件1');
setTimeout(()=>{console.log('2级内宏事件2')});
}).then(()=>{
console.log('1级微事件2')
})
}
</script>
输出:
主事件1
主事件2
1级微事件1
1级微事件2
1级宏事件1
2级微事件3
2级内宏事件2
关于学习到的一些记录与知识总结