《深刻理解JavaScript閉包和原型》筆記

By XFE-堪玉javascript


如下知識來源於對王福朋所寫《深刻理解javascript原型和閉包》的理解和整理java

  1. 一切都是對象[引用類型],對象都是經過函數建立的[Funcion類型]閉包

  2. 對象是屬性的集合,所以屬性中的方法其實也是屬性的一種函數

  3. 函數也是一種對象,所以也是屬性的集合,能夠對其進行自定義屬性this

  4. 每一個函數都有一個屬性prototype,屬性值爲一個對象——原型對象prototype

  5. 每一個對象都有一個隱式__proto__屬性,指向建立該對象的函數的prototype指針

  6. 原型對象默認只有一個constructor的屬性,指向函數自己對象

  7. Function內置對象的__proto__指向了自身的Prototype,被自身建立繼承

  8. 自定義或內置函數的prototype本質上和var obj={}同樣的Object實例,都是被Object建立,所以根據語言的繼承特性,默認原型都會包含一個內部指針,指向Object.prototype,所以Object.prototype裏的全部屬性和方法被理所應當的繼承了下來ip

  9. 執行上下文激活至關於代碼的"前期準備工做",是在被調用時建立的,其數據內容包括:

    • 全局代碼的上下文環境
      1. 變量、函數表達式 ——變量聲明(默認賦值爲undefined)
      2. this ——賦值
      3. 函數聲明 ——賦值
    • 函數體的上下文環境
      1. 參數 ——賦值
      2. arguments ——賦值
      3. 自由變量 ——賦值
  10. 函數每被調用一次,都會產生一個新的執行上下文環境,執行完後上下文環境即被銷燬

  11. 做用域是在函數建立時就產生的,同一個做用域下可能同時存在不一樣的執行上下文

  12. 在函數中this到底取何值,是在函數真正被調用執行的時候肯定的,函數定義的時候肯定不了

  13. 處於活動狀態的執行上下文環境只有一個,其實這是一個壓棧出棧的過程——執行上下文棧

  14. 在當前做用域中使用,卻沒在當前做用域中建立的變量爲自由變量

  15. 對於自由變量的取值,要到建立這個函數的那個做用域中取值——是「建立」,而不是「調用」

相關文章
相關標籤/搜索