1.理解詞法作用域和動態(tài)作用域
詞法作用域:
定義在詞法階段的作用域
換言之,詞法作用域是由你在寫代碼時將變量和塊作用域?qū)懺谀睦飦頉Q定的,因此當(dāng)詞法分析器處理代碼時會保持作用域不變
詞法作用域
動態(tài)作用域:動態(tài)作用域并不關(guān)心函數(shù)和作用域是如何聲明以及在任何處聲明的归露,只關(guān)心它們從何處調(diào)用。換句話說移国,作用域鏈?zhǔn)腔谡{(diào)用棧的蛤育,而不是代碼中的作用域嵌套
Extra:
兩種運行時修改詞法作用域的方法:
1.eval(類似的有setTimeout、setInterval)
2.with
2.理解JavaScript的作用域和作用域鏈
作用域:
作用域鏈:
每一個 javaScript 函數(shù)都表示為一個對象扶檐,更確切地說凶杖,是 Function 對象的一個實例
Function 對象同其他對象一樣,擁有可編程訪問的屬性
內(nèi)部屬性 [[Scope]] 包含了一個函數(shù)被創(chuàng)建的作用域中對象的集合
這個集合被稱為函數(shù)的作用域鏈款筑,它能決定哪些數(shù)據(jù)能被訪問到
理解 JS 作用域鏈與執(zhí)行上下文
談?wù)?JavaScript 的作用域
3.理解JavaScript的執(zhí)行上下文棧智蝠,可以應(yīng)用堆棧信息快速定位問題
【譯】理解 Javascript 執(zhí)行上下文和執(zhí)行棧
PS:執(zhí)行上下文和作用域
什么是作用域和執(zhí)行上下文
4.this的原理以及幾種不同使用場景的取值
[參考]前端基礎(chǔ)1-1 this指向
5.閉包的實現(xiàn)原理和作用,可以列舉幾個開發(fā)中閉包的實際應(yīng)用
TODO
6.理解堆棧溢出和內(nèi)存泄漏的原理奈梳,如何防止
循環(huán)引用
一個很簡單的例子:一個DOM對象被一個Javascript對象引用杈湾,與此同時又引用同一個或其它的Javascript對象,
這個DOM對象可能會引發(fā)內(nèi)存泄露攘须。這個DOM對象的引用將不會在腳本停止的時候被垃圾回收器回收漆撞。要想破壞循環(huán)引用,
引用DOM元素的對象或DOM對象的引用需要被賦值為null阻课。
閉包
在閉包中引入閉包外部的變量時叫挟,當(dāng)閉包結(jié)束時此對象無法被垃圾回收(GC)。
DOM泄露
當(dāng)原有的COM被移除時限煞,子結(jié)點引用沒有被移除則無法回收抹恳。
Timers計(定)時器泄露
定時器也是常見產(chǎn)生內(nèi)存泄露的地方:
7.如何處理循環(huán)的異步操作
7.1異步操作保存變量(函數(shù)封裝)
7.2異步操作順序執(zhí)行(await、Promise.then)
7.3異步操作同步執(zhí)行(Promise.all署驻、執(zhí)行完后調(diào)用對應(yīng)方法)
8.理解模塊化解決的實際問題奋献,可列舉幾個模塊化方案并理解其中原理
1.CommonJS
Javascript模塊化編程(一):模塊的寫法
2.AMD
Javascript模塊化編程(二):AMD規(guī)范
Javascript模塊化編程(三):require.js的用法
3.CMD
4.ES6 import