JavaScript進階教程日記
1. 預編譯
1.1 全域性物件(GO物件) window
js引擎會整合所有<script>標籤中的內容, 產生window物件
全域性變數: 全域性物件的一個屬性
全域性函式: 全域性物件的一個方法
1.2 區域性物件AO/活動物件AO
函式被呼叫時產生,儲存當前函式內部的執行環境。方法執行完後, 區域性物件就消失
區域性變數: 是區域性物件的一個屬性
區域性函式: 是區域性物件的一個方法
1.3 全域性預編譯
全域性環境下(script標籤下),js引擎的預處理方式
步驟
1. 生成GO物件(window物件)
2. 查詢所有變數的宣告,變數名作GO物件屬性名,值為undefined
3. 查詢所有函式的宣告,函式名作GO物件屬性名,屬性值為function
同名的變數和函式,函式的優先順序高
1.4 函式預編譯
呼叫函式之前會做一個函式的預編譯
步驟
1. 呼叫那一刻,為函式生成一個AO物件
2. 查詢函式形參和區域性變數的宣告,作為AO屬性名,值為undefined
3. 實參值賦給形參
4. 找到區域性函式的宣告,函式名作AO物件屬性名,屬性值為function
區域性函式 > 實參 > 形參和區域性變數
2. 作用域
2.1 全域性作用域
script標籤產生的區域,window物件管控的區域
全域性的變數和函式瀏覽器關閉的時候銷燬
2.2 區域性作用域 function () { }
函式物件 管控區域
區域性變數和函式 在函式執行完成後銷燬
2.3 塊級作用域 { let a = 1; }
if、for 管控的 {} 區域
let
2.4 作用域鏈
內部可以訪問外部
使用陣列存放,棧結構(上端進出,元素壓棧進去,先產生的在下面)
本質
是一個資料結構,函式內部可以巢狀函式,每一次巢狀形成一個作用域,串起來就形成作用域鏈
每個函式內部都的【scopes】屬性,代表函式的作用域鏈,代表函式執行時所存在的執行環境(含每個作用域中的變數、區域性函式)
console.dir(a); //列印函式內部結構(含scopes屬性)
分別代表:
0 bAO
1 aAO
2 GO
斷點除錯
2.5 變數取值原則
就近原則,當前作用域中沒有 就找上一層,依次往上找,都沒有就報錯
3. 原型
例項成員 this新增的成員
靜態成員 在建構函式本身上新增的成員,透過建構函式名訪問
原型物件prototype: 建構函式的一個靜態成員屬性 Star.prototype
物件的原型: 物件的一個屬性 ldh.__proto__
原型物件與物件的原型,指向同一個物件,都有一個屬性constructor(指向建構函式本身)
原型鏈
概念
例項物件的__proto__屬性,指向的建構函式的原型物件。
(也是一個物件,也有__proto__屬性),再一層一層往上找就形成原型鏈
作用
1. 當例項物件呼叫方法,先在自身的this中的方法找
2. 沒有的話,透過__proto_找原型物件,看原型物件裡有無定義
3. 沒有的話,透過原型物件的__proto__再到上一層
4. 一直找到object都沒有,則報錯
__proto__ 物件原型的存在,就是為物件成員的查詢機制提供了一個方向
this指向
建構函式和原型物件中的this 都指向當前建立的物件
應用(為js陣列Array擴充套件sum方法)
Array.prototype.sum = function(){
console.log(this); //this代表這個陣列物件
var total = 0
for(var i=0; i<this.length; i++){//當前陣列長度
total += this[i] //當前陣列某個值
}
return total
}
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70001647/viewspace-2998766/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript進階JavaScript
- Arthas 進階教程
- Vim進階教程
- javascript進階教程第一章案例實戰JavaScript
- (一)《SQL進階教程》學習記錄--CASESQL
- javascript 進階之 - PromiseJavaScriptPromise
- JavaScript進階之事件JavaScript事件
- (二)《SQL進階教程》學習記錄--GROUP BY、PARTITION BYSQL
- JavaScript進階之繼承JavaScript繼承
- JavaScript進階之原型鏈JavaScript原型
- JavaScript進階之陣列JavaScript陣列
- JavaScript進階之函式JavaScript函式
- 進階 Javascript 生成器JavaScript
- 進階筆記筆記
- SQL入門-進階教程SQL
- Kotlin 進階教程(一)Kotlin
- Homebrew進階使用教程(一)
- JavaScript 記憶體機制(前端同學進階必備)JavaScript記憶體前端
- SpringBoot進階教程 | 第二篇:日誌元件logback實現日Spring Boot元件
- JavaScript進階之(一) this指標JavaScript指標
- JavaScript進階系列07,滑鼠事件JavaScript事件
- JavaScript學習8:DOM進階JavaScript
- flaskr 進階筆記Flask筆記
- Arthas進階-筆記筆記
- JavaScript學習筆記 - 進階篇(3)- 流程控制語句JavaScript筆記
- 辦公進階:HoudahSpot使用教程
- .NET5 WPF進階教程
- OPENVINO官方開發進階教程
- jsp進階教程和ServletJSServlet
- 詳解前端進階指南教程前端
- C# 使用Log4Net記錄日誌(進階篇)C#
- 前端進階技術:JavaScript 和 CSS 常用工具方法封裝教程!前端JavaScriptCSS封裝
- Android高手進階教程(二十)之---Android與JavaScript方法相互呼叫!AndroidJavaScript
- 【進階1-4期】JavaScript深入之帶你走進記憶體機制JavaScript記憶體
- Java小白進階筆記(5)-進階物件導向Java筆記物件
- JavaScript正規表示式進階指南JavaScript
- JavaScript進階之基礎語法JavaScript
- JavaScript進階系列06,事件委託JavaScript事件