js中關於執行的順序及變量存放方式的一點記錄

Markdown在線編輯器 - www.MdEditor.comjavascript

1 首先關於數據類型,有基本數據類型,和引用數據類型

基本數據類型有:number,string,boolean等;引用數據類型通常指object
棧:大小固定;堆:大小不固定;棧中存放一些基本的數據類型,和引用數據類型的地址;堆中存放引用數據類型的實際值。

形成問題,當兩個變量指向同一個地址時,引發數據的同步修改java

  1. <script>
  2. window.onload =function(){
  3. var arr1 =[1,2,3,4,5];
  4. //淺拷貝
  5. var arr2 = arr1;
  6. arr2[2]=100;
  7. console.log(arr1);//[ 1, 2, 100, 4, 5 ]
  8. console.log(arr2);//[ 1, 2, 100, 4, 5 ]
  9. //深拷貝
  10. var arr3 =[];
  11. for(let i in arr1){
  12. arr3[i]= arr1[i];
  13. }
  14. arr3[2]=555;
  15. console.log(arr1);//[ 1, 2, 100, 4, 5 ]
  16. console.log(arr3);//[ 1, 2, 555, 4, 5 ]
  17. }
  18. </script>

2 js是單線程的語言,只有一個執行的進程,在解析執行js文件的時候,對一些形成異步的函數,會將該處理事件放入宏任務待執行隊列,和微任務待執行隊列

宏任務與微任務的執行順序是,執行一個宏任務後,執行全部的微任務,在接着執行宏任務
宏任務:setTimeout,setInterval等;微任務:Promise.then catch finally;process.nextTick;等
  1. <script>
  2. window.onload =function(){
  3. setTimeout(()=>{
  4. console.log('1級宏事件1');
  5. newPromise((resolve)=>{ resolve()})
  6. .then(()=>{
  7. console.log('2級微事件3');
  8. })
  9. });
  10. console.log('主事件1');
  11. newPromise((resolve)=>{
  12. console.log('主事件2');
  13. resolve()
  14. }).then(()=>{
  15. console.log('1級微事件1');
  16. setTimeout(()=>{console.log('2級內宏事件2')});
  17. }).then(()=>{
  18. console.log('1級微事件2')
  19. })
  20. }
  21. </script>

輸出:
主事件1
主事件2
1級微事件1
1級微事件2
1級宏事件1
2級微事件3
2級內宏事件2 promise

相關文章
相關標籤/搜索