代碼段概念
- 一個script就是一個代碼段
- 在一個頁面中可以有多個代碼段
- 每一個代碼段, 彼此獨立的, 如果上面的代碼段報錯了,不會影響下一個代碼段
- referenceError 參考錯誤
- 下面代碼段中定義的資料,在下面的代碼段中可以使用
預編譯/預決議
- 預決議期間做了什么
- 宣告提升 ,var 定義的變數 提升的僅僅是宣告,沒有賦值,強行呼叫,回傳undefined;function宣告的函式整體要提升, 提升到代碼段的最前面
- 如果是函式內部的區域變數, 就提升到函式內部的最前面
- var定義的變數僅僅是提升, 函式提升不僅是宣告,還有賦值
- 函式運算式 本質是一個變數
fun();//這里會報錯, 函式運算式提升 只宣告沒賦值, 這里fun的值是undefined var fun = function(){console.log('fun...')} - 函式也會提升,如果提升變數名和函式名一樣,只會存在一個名字,所以函式提升后 同名變數的值就會變成函式
console.log(v); var v = 123; function v(){} console.log(v); // 輸出 // function v(){} // 123 - 函式內部沒有定義的的變數,是全域變數
function fn(){ a = 100 //a在函式內部沒有定義 就是全域變數 } fn() console.log(a) //110
資料存盤
1. 堆疊-基本資料型別
2. 堆- 參考資料型別
JS變數都存盤在記憶體中,而記憶體給變數開辟了兩塊存盤空間,分別為堆疊(stack)空間和堆(heap)空間;
堆疊空間:存放JS基本資料型別,通過按值訪問,可以直接操作保存在變數中的實際值;
堆空間:存放JS參考資料型別,通過物件的參考訪問,不可以直接訪問堆記憶體空間中的位置和操作堆記憶體空間,只能操作物件在堆疊記憶體中的參考地
址,
ECG 執行背景關系
1. 全域代碼執行時就會產生全域的執行背景關系, execution context globle
2. 每當呼叫函式就產生一個區域的執行背景關系EC
3. 執行背景關系產生時, 都需要放到一個堆疊中, 這個就是執行背景關系堆疊 execution context stack
4. 函式呼叫完畢,函式的EC就要出堆疊,當ECG執行完畢時, ECG也要出堆疊
5. 出入堆疊 遵循 先進后出 也就是ECG先進 最后出來
6. 代碼的資料都是在背景關系EC中去找
堆 GO
1. js在代碼執行時, 會在堆中創建一個全域物件,Globle Object GO
2. 在瀏覽器中 這個GO就是window
3. GO是一個window , window是一個全域物件,物件是屬性的無序集合
4. 宣告的全域變數 和 在全域代碼中寫的函式都掛載在GO上

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/545248.html
標籤:其他
