1. 聊一聊什么是调用栈
比较官方的术语是: 调用栈是解释器(比如浏览器中的 JavaScript 解释器)追踪函数执行流的一种机制。
白话文解释一下, 无论何种语言,
在程序调用的过程中总会从一个方法调用到另外一个方法中,这种调用关系的执行在内存中会有一个栈的先进后出的过程。
最初是一个空栈,最终也会得到一个空栈,如果调用层级特别多,会出现栈溢出错误。
2. 尾调用优化
在开发过程可能会见到过方法的最后一行返回的结果是另外一个方法,或者方法的最后一行调用的另外一个方法。这就叫做尾调用。
我们知道,函数调用会在内存形成一个"调用记录",又称"调用帧"(call frame)。但是在方法最后调用其他方法,自身方法已经没有可执行
其他逻辑代码,因而可以优化为提出来,也就是说减少一层栈内存的使用。也就是说不必写在方法内部的最后,如果可以,我们最后将其提取处理
一定程度上可以大大节省内存空间。
3. 执行上下文和执行栈
执行上下文的类型: 全局、函数、Eval函数(独立的执行区域)
执行上下文的两个阶段: 创建阶段和执行阶段
创建阶段: 1. this的绑定,全局环境默认指向Window对象,函数中,要看函数是如何被调用的。