1.栈是什么?

- 栈就是一个后进先出的数据结构
- JavaScript 中没有栈,但是可以使用Array实现栈的所有功能
- Java中有栈数据结构的
- 在编辑器中鼠标左键打断点,按F5 选择 Node.js 即可调试


const stack = [];
stack.push('a')
stack.push('b')
const a1 = stack.pop()
const a2 = stack.pop()
2.什么场景下使用栈?
- 所有需要后进先出的场景
-
- 十进制转二进制
-
- 判断字符串的括号是否有效
-
- 函数调用堆栈...
场景一: 十进制转二进制

1. 输出 100011
2. 后出来的余数反而要排到前面
3. 把余数依次入栈,然后出栈,就可以实现余数的倒序输出.
场景二: 有效的括号

1.越靠后的左括号,对应的右括号越靠前
2.左括号入栈,右括号出栈,最后栈空了就是合法的
场景三: 函数调用堆栈
- 对于相互调用函数而言,最后被调用的函数,会最先执行完
- 第一个调用的fn1
- 在fn1中调用了 sayHi()
- 在后面的sayHi()先执行的
- 只有在sayHi()执行完成之后才能执行fn1
- 一前一后,这不就是后进先出,可以用栈来控制
- js解释器使用栈来控制函数的调用顺序
1. 可以看到在最底部 调用了fn1函数
2. 进入之后先执行[1] 代码
3. 然后执行sayHi()
4. 再执行[2] 代码
5. 整个fn1函数执行完成之后
6. 执行[3] 代码
function fn1 () {
sayHi();
}
function sayHi() {
return 'Hello Hi!'
}
fn1()