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