javascript
- scope chain
- context(this指向)
- excution context
scope chain
即執行環境(execution environment)
即一條執行時
才會建立的定義時
已經決定了(liao)的鏈。
context(this指向)
this === context
var name = '亞索'
// 1-------------------------------------------------------
var obj = {
name: '銳雯',
readName: function() {
console.log(this.name)
}
}
obj.readName()
// bind用法
obj.readName.bind(this) //invalid
var otherFn = obj.readName
otherFn.bind(this)
otherFn()
// call用法
obj.readName.call(this)
// apply用法
obj.readName.apply(this)
// 2--------------------------------------------------------
function readName() {
(function ad() {
console.log(this.name)
})()
}
readName()
// 3-------------------------------------------------------
function Person(name) {
this.name = name
}
console.log(new Person(name).name)
// 4-------------------------------------------------------
var obj2 = {
readName: () => {
console.log(this.name)
}
}
obj2.readName()
obj2.readName.call(this)
複製程式碼
結果請複製到控制檯執行後檢視結果
注:箭頭函式其實沒有自己的this指標,它只是一個語法糖
箭頭函式
var bbb = {
name: '銳萌萌',
normalFn: function b () {
return () => {
console.log(this.name)
}
},
arrowFn: function b () {
let _this = this
return function () {
console.log(_this.name)
}
}
}
複製程式碼
excution context
我們理解JS引擎時所瞭解的棧即為執行環境棧。比如我們用語言模擬一段指令碼執行到function後發生的一系列動作。
建立階段(creation phase)
- 建立一個變數物件(也稱活動物件)常常由定義在當前執行環境中的內部變數、內部function以及引數組成,且僅能被解析器訪問
- 初始化作用域鏈
- this指標被最終確定
- 推入堆疊並獲取控制權
執行階段(execution phase)
- 程式碼在當前執行環境中執行,執行完成後pop出當前執行環境,並將控制權移交給上一級執行環境