JS基础-作用域与闭包

1.理解词法作用域和动态作用域

词法作用域
定义在词法阶段的作用域
换言之,词法作用域是由你在写代码时将变量和块作用域写在哪里来决定的,因此当词法分析器处理代码时会保持作用域不变
词法作用域

动态作用域:动态作用域并不关心函数和作用域是如何声明以及在任何处声明的,只关心它们从何处调用。换句话说,作用域链是基于调用栈的,而不是代码中的作用域嵌套

Extra
两种运行时修改词法作用域的方法:
1.eval(类似的有setTimeout、setInterval)
2.with

2.理解JavaScript的作用域和作用域链

作用域:

作用域链:
每一个 javaScript 函数都表示为一个对象,更确切地说,是 Function 对象的一个实例
Function 对象同其他对象一样,拥有可编程访问的属性
内部属性 [[Scope]] 包含了一个函数被创建的作用域中对象的集合
这个集合被称为函数的作用域链,它能决定哪些数据能被访问到
理解 JS 作用域链与执行上下文
谈谈 JavaScript 的作用域

3.理解JavaScript的执行上下文栈,可以应用堆栈信息快速定位问题

【译】理解 Javascript 执行上下文和执行栈
PS:执行上下文和作用域
什么是作用域和执行上下文

4.this的原理以及几种不同使用场景的取值

[参考]前端基础1-1 this指向

5.闭包的实现原理和作用,可以列举几个开发中闭包的实际应用

TODO

6.理解堆栈溢出和内存泄漏的原理,如何防止

循环引用

一个很简单的例子:一个DOM对象被一个Javascript对象引用,与此同时又引用同一个或其它的Javascript对象,

这个DOM对象可能会引发内存泄露。这个DOM对象的引用将不会在脚本停止的时候被垃圾回收器回收。要想破坏循环引用,

引用DOM元素的对象或DOM对象的引用需要被赋值为null。

闭包

在闭包中引入闭包外部的变量时,当闭包结束时此对象无法被垃圾回收(GC)。

DOM泄露

当原有的COM被移除时,子结点引用没有被移除则无法回收。

Timers计(定)时器泄露

定时器也是常见产生内存泄露的地方:

7.如何处理循环的异步操作

7.1异步操作保存变量(函数封装)
7.2异步操作顺序执行(await、Promise.then)
7.3异步操作同步执行(Promise.all、执行完后调用对应方法)

8.理解模块化解决的实际问题,可列举几个模块化方案并理解其中原理

1.CommonJS
Javascript模块化编程(一):模块的写法
2.AMD
Javascript模块化编程(二):AMD规范
Javascript模块化编程(三):require.js的用法
3.CMD
4.ES6 import

你可能感兴趣的:(JS基础-作用域与闭包)