看大神文章的總結
- “一切都是物件”
- 物件都是通過函式來建立的。
- 函式也是一種物件。
- 每個函式都有一個屬性 -> prototype
- 每個物件都有一個隱藏的屬性 - > __proto__
- 物件的__proto__ === function.prototype
- typeof 檢測值型別
- instanceof 判斷引用型別 (區分屬性是基本的還是原型中 -> hasOwnproperty ,特別在for .. in ... 過濾掉原型中的屬性)
- 所有物件的原型鏈都會找到Object.prototype 這就是“繼承”
- 每個函式都有call 、 apply 方法,有length、arguments、caller (函式由Function函式建立,繼承Function.prototype中的方法)
- 執行上下文環境 -> 執行之前,將要用的先拿出來,有的賦值、有的underfied
- *** 在函式中this 到底取何值, 是在函式真正被呼叫執行時確定
- / 函式作為物件的一個屬性
- 如函式作為物件的一個屬性,並且作為物件屬性被呼叫時,this指向該物件
- 全域性和呼叫普通函式,其中this也都是window
- javascript 沒有塊級作用域, 只有函式可以建立作用域
- // ** 作用域 在函式定義時就已經確定了,而不是在函式呼叫時確定
- 如果要查詢一個作用域下某個變數的值,就需找到這個作用域對應執行上下文環境
- 靜態作用域 = > 要到建立這個函式的那個作用域取值,“建立” 不是“呼叫”
- 閉包應用的兩種情況:
- 1.函式作為返回值 2. 函式作為引數傳遞