概述javascript部分核心機制

weixin_33861800發表於2018-06-10

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)

  1. 建立一個變數物件(也稱活動物件)常常由定義在當前執行環境中的內部變數、內部function以及引數組成,且僅能被解析器訪問
  2. 初始化作用域鏈
  3. this指標被最終確定
  4. 推入堆疊並獲取控制權

執行階段(execution phase)

  1. 程式碼在當前執行環境中執行,執行完成後pop出當前執行環境,並將控制權移交給上一級執行環境

相關文章