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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容