之前面试时遇到这个问题, 当时脑子不太好使没想到这道题的考察点是什么.
后来复盘了一下才反应过来这道题考的是函数调用栈啊!
什么是函数调用栈
程序在运行期间,内存中有一块区域,用来实现程序的函数调用机制。这块区域是一块LIFO的数据结构区域,我们可以叫函数栈(调用栈)。
每个未退出的函数都会在函数栈中拥有一块数据区,我们叫函数的栈帧。函数的调用栈帧中,保存了相应的函数的一些重要信息:函数中使用的局部变量,函数的参数,另外还有一些维护函数栈所需要的数据.
resolve(reject(1))走then还是catch
答案, 显而易见, 走到catch里;
函数调用栈的其他问题场景
函数调用栈还有一些其他场景, 比如
1. 闭包
当一个函数return的是另一个函数时, 这个函数的调用帧不会被删除, 仍然保存着当前函数的上下文, 所以也不会被垃圾回收, 滥用会造成内存泄漏
2. 尾调用和尾递归
这个讲起来有点复杂, 具体可以查看阮大大的ES6教程中关于尾递归优化那一节
简单说来就是, 在尾递归时, 函数调用栈中只会保存一个调用帧, 大大节省了资源
等等
明天开始休假啦, 就不更新了
祝大家假期快乐~~~