this指向 不得不看的this指向問題

2021-09-10 05:47:48 字數 1259 閱讀 6497

分析this的指向共有四種型別

1、函式被呼叫時(即執行時)才會確定該函式內this的指向。因為在函式中this與arguments是兩個特殊的變數,在函式被呼叫時才會取得它們,而且搜尋這兩個變數時只會在活動物件範圍裡面去搜。

2、要確定函式中this的指向,必須先找到該函式被呼叫的位置。

認準第一種 test()形式

var a = 1

function test ()

test()

直接不帶任何引用形式去呼叫函式,則this會指向全域性物件,因為沒有其他影響去改變this,this預設就是指向全域性物件(瀏覽器是window,node中是global)的。這個結論是在非嚴格模式的情況下,嚴格模式下這個this其實是undefined的。

認準第二種 ***.test()形式

var a = 1

function test ()

var obj =

obj.test()

這種形式對比起第一種,很明顯 test()已經是名花有主的了!看清楚,是誰呼喚的test()?沒錯,就是obj,所以this的指向就不言而喻了。一句話,誰去呼叫這個函式的,這個函式中的this就繫結到誰身上。

var a = 1

function test ()

var obj =

var obj0 =

obj0.obj.test()

即使是這種串串燒的形式,結果也是一樣的, test()中的this只對直屬上司(直接呼叫者obj)負責。再來看乙個綜合點的例子:

var a = 1

function test ()

var obj =

var testcopy = obj.test

testcopy()

按照我們的套路,我們就認函式調時的樣子,有沒有看到最後呼叫的時候跟第一種情況一毛一樣?我再介紹乙個場景大家一定不會覺得陌生:

var a = 1

function test ()

var obj =

但是有個東西別忘了,就是大家最喜歡的箭頭函式。

var a = 1

var test = () =>

var obj =

obj.test()

來,往上翻一下我們的第乙個錦囊,「函式被呼叫時(即執行時)才會確定該函式內this的指向。」現在函式這兩個字要加個詞修飾一下,變成普通函式(非箭頭函式)才能區別於箭頭函式。箭頭函式中的this在函式定義的時候就已經確定,它this指向的是它的外層作用域this的指向。

IT人士不得不看的成長手冊

作為it技術人員,相信沒有乙個人願意永遠在底層編寫程式或做簡單的系統維護。經過一段時間的技術和經驗的積累,很多人都嚮往更高層的職位,但如何能成為乙個專業的it管理人才,並不是每乙個人都清晰 明了。如果你真想成為一名成功 成熟的it專家,你需要不斷地擴充套件你的技能與知識 有些知識領域可能對你很陌生,...

不得不看的B樹索引

一 先導 練習 31 18 73 9 27 37 99 上面資料經過一系列插入後 變成了有序的結構,且符合二叉樹的特性 但是如果是同一組數 9 18 27 31 37 73 99 公升序後再排序 這種情況出現了嚴重的傾斜,這是比較極端的情況 二叉樹變成線性結構了,查詢效率明顯降低,沒有發揮出二叉樹的...

IT人士不得不看的保健手冊

專門針對站長生活習性的作息飲食建議 看不起的病 不死的癌症 1 堅持 定時 休息 12點之前 標準睡眠時間8小時 2 養成習慣起床後 喝水 茶 休息後再 吃早餐 雞蛋 稀飯 粥 玉公尺糊 包子 青菜等,建議避免 油炸的 3 飯後百步走 飯後散步 10分鐘左右 4 每小時休息讓眼睛休息幾分鐘 看遠方 ...