zoukankan      html  css  js  c++  java
  • js中关于执行的顺序及变量存放方式的一点记录

    Markdown在线编辑器 - www.MdEditor.com

    1 首先关于数据类型,有基本数据类型,和引用数据类型

    基本数据类型有:number,string,boolean等;引用数据类型一般指object
    栈:大小固定;堆:大小不固定;栈中存放一些基本的数据类型,和引用数据类型的地址;堆中存放引用数据类型的实际值。

    造成问题,当两个变量指向同一个地址时,引起数据的同步修改

    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


  • 相关阅读:
    OpenGL红宝书:第一个渲染程序Triangles常见问题归总
    OpenGL绘制简单的参数曲线(完)——三次B样条曲线
    OpenGL绘制简单的参数曲线(二)——三次Bezier曲线
    OpenGL绘制简单的参数曲线(一)——三次Hermite曲线
    xcode:读取txt文件
    mac opengl 画一个三角形
    glVertexAttribPointer
    glEnableVertexAttribArray 使用
    macOS下基于GLFW+GLAD的OpenGL环境配置
    php 执行 shell 命令转义字符
  • 原文地址:https://www.cnblogs.com/Zxq-zn/p/11742122.html
Copyright © 2011-2022 走看看