1. 程式人生 > 其它 >2021-2022-1學期 20212313《網路空間安全專業導論》 第五週學習總結

2021-2022-1學期 20212313《網路空間安全專業導論》 第五週學習總結

/*全域性作用域
1.全域性作用域在頁面開啟時被建立,頁面關閉時被銷燬
2.編寫在script標籤中的變數和函式,作用域為全域性,在頁面的任意位置都可以訪問到
3.在全域性作用域中,有全域性物件Windows,代表一個瀏覽器視窗,有瀏覽器建立,可以直接呼叫
4.全域性作用域中宣告的變數和函式會作為windows物件的屬性和方法儲存
*/

/*函式的作用域
1.呼叫函式時,函式作用域被建立,函式執行完畢,函式作用域被銷燬
2.每呼叫一次函式就會建立一個新的函式作用域,它們之間是相互獨立
3.在函式作用域中可以訪問到全域性作用域中的變數,在函式歪的變數無法訪問到函式作用域中的變數
4.在函式作用域中訪問變數、函式時,會先在自身作用域中尋找,若沒有,則會到函式的上一級作用域尋找,一直到全域性作用域
*/

/* 函式作用域的深層理解
- 當函式執行程式碼的前期,會建立一個執行期的上下文的內部物件 AO (作用域)
- 這個內部物件是預編譯的時候創建出來的,應為當函式被呼叫時,會先進行預編譯
= 在全域性程式碼執行的前期,會建立一個執行期的上下文的物件 GO
*/

/* 函式作用域的預編譯
1.建立AO物件 AO{}
2.找形參和變數宣告,將變數和形參名當做AO物件的屬性名,值為undefined
3.實參形參相統一
4.在函式體裡找函式宣告,值賦予函式體
*/

/* 全域性作用域的預編譯
1.建立GO物件
2.找變數宣告,將變數名作為GO物件的屬性名,值為undefined
3.找函式宣告 賦值於函式體
*/

 1 <!--
 2  * @Author: your TM_cc
 3  * @Date: 2021-11-01 15:04:53
 4  * @LastEditTime: 2021-11-01 18:43:26
 5  * @LastEditors: Please set LastEditors
 6  * @Description: In User Settings Edit
7 * @FilePath: \作用域.html 8 --> 9 <!DOCTYPE html> 10 <html lang="en"> 11 <head> 12 <meta charset="UTF-8"> 13 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 14 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 15 <title>作用域</title> 16 </head> 17 <body> 18 <script> 19 function fn(a,c){ 20 console.log(a) // function a() {} 21 var a = 123 22 console.log(a) // 123 23 console.log(c) // function c() {} 24 function a() {} 25 if (flase){ 26 var d = 456 27 } 28 console.log(d) // undefined 29 console.log(b) // undefined 30 var b = function () {} //函式的表示式 31 console.log(b) // function () {} 32 function c() {} 33 console.log(c) // function () {} 34 } 35 fn(1,2) 36 /* 37 1.建立AO物件 38 AO:{ - 2.找變數宣告 值為undefined 39 - 3.找函式宣告並賦值 40 a:undefined 1 function a() {} 同名覆蓋變數申明 41 c:undefined 2 function c() {} 同名覆蓋變數申明 42 b:undefined 43 d:undefined 44 } */ 45 46 47 /* 作用域鏈 48 - 會被儲存到一個隱式的屬性中去 [[scope]] 這個屬性是使用者訪問不到的,蛋殼已讓js引擎來訪問;裡面儲存的就是作用域鏈 49 - 函式只有在執行的時候才有AO 50 */ 51 </script> 52 </body> 53 </html>