#### 1. 理解词法作用域和动态作用域
1. 作用域:就是一套规则,用于确定在何处以及如何查找变量的规则
2. 词法作用域:也就是静态作用域,JS采用的是词法作用域,函数的作用域在函数定义的时候就决定了
3. 动态作用域:函数的作用域是在调用的时候确定的
4. 案例:因为JS是采用词法作用域,所以foo函数在定义的时候已经确定了,value // 1
```
var value = 1;
function foo() {
console.log(value);
}
function bar() {
var value = 2;
foo();
}
bar();
```
#### 2. 理解JavaScript的作用域和作用域链
1. 作用域:JS中分为全局、局部、块级(ES6+)三个作用域
2. 作用域最大的作用就是隔离变量,不同作用域下的同名变量不会有冲突
3. 作用域链:变量在查找过程中,由最近的作用域一直查找到顶层作用域,所形成的链为作用域链
#### 3. 理解JavaScript的执行上下文栈,可以应用堆栈信息快速定位问题
1.
#### 4. this的原理以及几种不同使用场景的取值
1. this的取值取决于函数的四种调用方式
1. 函数直接调用:this指向window
2. 函数由对象调用:this指向所有的对象
3. 函数由call apply bind调用,显示更改指向:this指向传入的对象,也就是第一个参数
4. 函数由new创建构造函数:this指向新创建的实例对象
#### 5. 闭包的实现原理和作用,可以列举几个开发中闭包的实际应用
1.
#### 6. 理解堆栈溢出和内存泄露的原理 ,如何防止
1. 堆栈溢出:当程序运行需要的内存超过了系统所分配的内存时,就会抛出内存溢出的错误
2. 内存泄露:
1. 内存泄露积累过多就容易造成内存溢出
2. 占用的内存没有及时释放
3. 开发中常见的内存泄露 1. 闭包 2. 占用内存很大的全局变量 3. 没有及时清理的计时器/定时器
#### 7. 如何处理循环的异步操作
1.
#### 8. 理解模块化解决的实际问题,可列举几个模块化方案并理解其中原理
1.