Markdown 在线编辑器 - www.MdEditor.com
1 首先关于数据类型, 有基本数据类型, 和引用数据类型
基本数据类型有: number,string,boolean 等; 引用数据类型一般指 object
栈: 大小固定; 堆: 大小不固定; 栈中存放一些基本的数据类型, 和引用数据类型的地址; 堆中存放引用数据类型的实际值.
造成问题, 当两个变量指向同一个地址时, 引起数据的同步修改
- <script>
- Windows.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>
- Windows.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
来源: http://www.bubuko.com/infodetail-3258033.html