你不知道的JavaScript 筆記

2021-08-20 01:49:57 字數 838 閱讀 6718

作用域是什麼?

作用域的兩種工作模式: 詞法作用域和動態作用域

1. 查詢:作用域查詢會在找到第乙個匹配識別符號停止

2. 欺騙詞法

eval:修改作用域 with:建立新的作用域

後果:導致js引擎在靜態分析時停止優化,導致效能下降

遵循最小授權原則

1. 隱藏內部實現

2. 規避衝突

3. 立即執行函式(iife)

閉包: 基於詞法作用域書寫**產生,在詞法作用域以外執行

1. 函式內定義,外部呼叫

2. 函式內定義匿名函式,並執行 如:定時器和事件繫結

迴圈和閉包:

var後面的i會覆蓋前面的i,let每次建立是塊作用域不會覆蓋,也可以使用者iife建立乙個函式作用域防止覆蓋

模組

模組模式的兩個條件:

1. 必須有外部的封裝的函式,並至少執行一次

2. 封裝函式至少返回乙個內部函式

基於函式的模組只有在執行時才能被考慮,無法靜態分析 import不需要

動態作用域: 執行時決定

靜態作用域: 定時時確定

為什麼使用?

- 可以隱式傳遞乙個物件的引用,**更加優雅

- 特點: 動態繫結,取決於呼叫的位置

類是一種設計模式

1. 多重繼承

2. 混入 淺拷貝 object.assign()

3. 顯示偽多型: obj.bar.call(this, …)

注意點: 顯示混入只能複製物件的引用,無法複製物件和函式本身

你不知道的javascript(二)

1.詞法作用域 就是定義在詞法階段的作用域,作用域查詢會在找到第乙個匹配的識別符號時停止。在多層的巢狀作用域中可以定義同名的標識 符,這叫作 遮蔽效應 內部的識別符號 遮蔽 了外部的識別符號 拋開遮蔽效應,作用域查詢始終從 執行時所處的最內部作用域開始,逐級向外或者說向上進行,直到遇見第乙個匹配的識...

你不知道的JavaScript (上)

一 編譯的原理主要分為三個步驟 1 分詞 詞法分析 這個步驟主要是將字串分解成有意義的 2 解析 語法分析 陣列巢狀形成結構樹。3 生成 將結構樹轉化為 的過程。二 作用域 引擎主要進行搜尋查詢編譯等過程,分為左查詢lhs和右查詢rhs 編譯器主要是進行 的生成,語法分析。作用域主要是 確定訪問許可...

你不知道的JavaScript 作用域(二)

詞法階段 詞法作用域是定義在詞法階段的作用域。欺騙詞法 欺騙詞法的兩個機制 1 eval function foo str,a var b 2 foo var b 3 1 結果是1,3function foo str foo var a 2 2 with var obj 單調乏味的重複 obj ob...