資料視覺化對企業經營的3大價值
論閉包前先了解以下執行上下文
執行上下文
什麼是執行上下文:執行上下文是評估和執行JavaScript程式碼的環境的抽象概念,每當JavaScript程式碼執行時,它都是在執行上下文中執行的。
執行上下文的型別
全域性執行上下文
這是基礎的或者預設的執行上下文,任何不再函式內部的程式碼都在全域性執行上下文中。在瀏覽器中,全域性執行上下文會建立一個全域性的window物件,並讓this指向window物件,一個程式只能有一個全域性執行上下文。
函式執行上下文
每當一個函式被呼叫時,都會為該函式建立一個新的執行上下文,每個函式都有它的執行上下檔案了。多個函式對應多個函式執行上下文,所以函式執行上下文可以有任意多個,這是函式執行上下文與全域性執行上下文的區別之一。
Eval函式執行上下文
eval()
函式用於將傳入的字串當做 JavaScript 程式碼進行執行。如果傳入的引數不是字串,那麼eval()將傳入值原封不動得返回。
console.log(eval('2 + 2')); // expected output: 4 eval(new String("2 + 2")); // 返回了包含"2 + 2"的字串物件 console.log(eval('2 + 2') === eval('4')); // expected output: true
執行在eval函式內部的程式碼會擁有屬於它自己的執行上下文。
執行上下文的生命週期
一個執行上下文的生命週期分為建立和執行階段
建立階段
建立階段發生的三件事是:
1.建立變數物件
建立變數物件主要包括三個步驟:
1.檢查當前上下文中的引數。該過程生成Arguments物件。並建立以形參變數名為屬性名,形參變數值為屬性值的屬性。
2.檢索當前上下文中的函式宣告。該過程建立以函式名為屬性名,函式所在的記憶體地址引用為屬性值的屬性。
3.檢索當前上下文中的變數宣告。該過程建立變數名為屬性名,undefine為屬性值的屬性。
2.建立作用域鏈
作用域鏈是由當前上下文和上層上下文的一系列變數物件所組成的層級鏈。在執行上下文執行階段。當需要查詢某個變數或者函式時,會在當前執行上下文中的變數物件中查詢,如果沒有找到則會沿著上層上下文的變數物件層層往上查詢,直到查詢到全域性上下文中的變數物件。
3.確定this指向
當函式被調時,會建立該函式的執行上下文,同時確定this的指向,所以說this是在函式被呼叫時確定的。
關於this指向。
執行階段
執行階段的工作只要是為變數賦值以及執行其他程式碼,在執行階段,變數物件會轉換為活動物件,原先宣告的變數會被賦值。