JavaScript 學習筆記 之 THIS (一) - 簡介

關於this的誤解

首先,this並不是像它的英語意思一樣指向函數本身

來看個例子

function showThis(){
	this.count++;
	console.log(this.count);
}
showThis.count=0;
showThis();//NaN
console.log(showThis.count);//0

如果this指向調用函數本身的話

輸出的應該是1纔對,爲什麼調用時輸出的是NaN和0呢?

這段代碼中,showThis.count確實給showThis創造了一個count屬性並賦值爲0

但是執行函數的時候this指向的是window對象,也就是說調用的實際上是window.showThis() (因爲showThis被聲明在全局作用域)

 

第二種常見的誤解是,this指向函數的作用域

首先確定一點,this在任何情況下都不指向函數的詞法作用域

JavaScript中的作用域確實和對象類似,可見的標識符都是它的屬性

但是作用域"對象"無法通過JavaScript代碼訪問,它存在在JavaScript引擎內部

 

this是什麼

首先,this是在運行時進行綁定的,與作用域不同,作用域是在定義時綁定,與執行位置無關

因此,this的綁定和函數聲明的位置沒有任何關係,只跟調用函數的方式有關

當一個函數被調用時,會創建一個活動記錄(執行上下文)

包括了函數在哪裏調用(調用棧),調用方式,傳入的參數等

this就是這個記錄的一個屬性

因此,this實際上是在函數被調用時發生的綁定,指向什麼完全取決於函數在哪裏被調

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章