關於tm的this指向問題

爲啥用this

由於自己比較菜,對爲啥要用this的理解就是方便、簡潔,可以隱式的傳遞一個對象的引用,讓代碼邏輯簡潔,方便。

this的指向問題

誤解一:this指向函數自身

var a = 1
function test() {
	var a = 2
	console.log(this.a)
}
test()
// 1

如果this指向函數自身,那麼應該輸出2

誤解二:this指向函數

var a = 1
function test () {
	var a = 2
	fun()
}
function fun() {
	console.log(this.a)
}
test()
// 1

如果this可以指向函數,那麼應該輸出2

this到底指向哪?

首先要知道到this是函數裏自帶的一個特殊對象,this的指向是在函數執行時所確定的,this既不指向函數自身,也不指向函數。函數在哪調用,this指向哪。看個栗子

var a = 1
function fun () {
	console.log(this.a)
}
fun()
// 1

這裏fun函數在全局調用,那麼fun的this就指向全局,也就是window對象。

var a = 2
obj = {
	a: 1,
	fun: fun
}
function fun() {
	console.log(this.a)
}
obj.fun()
// 1

上面栗子中,fun在obj中調用,fun中的this指向obj。

var a = 1
function fun () {
	var a = 2
	return fun1
}
function fun1() {
	var a = 3
	console.log(this.a)
}
fun()()
// 1

上面代碼中,先執行fun方法,返回fun1方法,接着執行fun1,fun1還是在全局環境中執行,所以,不管你怎麼引用或者返回,函數中的this就是那個對象調用函數,this就指向誰!!!

function test() {
	console.log('test',this)
	function fn() {
		console.log('fn', this)
	}
	fn()
}
let obj = {
	test: test
}
obj.test()
// tset: obj
// fn: window

上面代碼,test()作爲obj的一個屬性被obj調用,this指向obj,fn在test()中執行,沒人調用它,那他的this就tm指向window。

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