關(guān)于變量賦值過程、自執(zhí)行函數(shù)、作用域、this指向的個坑:

obj的值指向obj這個變量


// 代碼執(zhí)行過程:
1.變量提升,賦值。
2.obj完成賦值前,立即執(zhí)行函數(shù)執(zhí)行。
??? 2.1 立即執(zhí)行函數(shù)變量提升,產(chǎn)生一個私有的局部變量 n。
??? 2.2 立即執(zhí)行函數(shù)的作用域為 window,傳入的實參值為全局變量n=1。
??? 2.3 私有變量n = 3*1;
??? 2.4 this.n 指向全局作用域,全局作用域下的n變?yōu)椋?。
??? 2.5 變量重復(fù)定義,私有變量n = 5。
??? 2.6 n=5 this.n=4。
??? 2.7 將這個函數(shù)作為值,返回給obj中的fn屬性。 ?
3.變量賦值完成,執(zhí)行后面的代碼
3.1 fn(3),函數(shù)沒有n,向上級作用域查找,n=5。 fn()在全局作用域下執(zhí)行,所以this指向全局作用域,this.n=4。 `console.log(m+(++n)) => 自增運算符,此時私有n = 6`
??????? 輸出結(jié)果為:5 4 9??
???
3.2 fn(3),函數(shù)沒有n,向上級作用域查找,n=6。 obj調(diào)用的fn(),所以this指向obj,this.n=2。
??????? 輸出結(jié)果為:6 2 10
???
3.4 輸出結(jié)果為:4 2???
標簽: