一道短小精悍的JS小題目
- 2019 年 10 月 8 日
- 筆記
看到題目你是不是以為我在開車,沒錯,我就不承認,你能咋的,你瞅啥,別瞅我,瞅題
題目是這樣式的
結果是啥呀,這裡我就不買關子了,結果是undefined,相信基礎好一點的大佬們一眼就能看出來,像我這種就必須兩隻眼一起看,這裡我又想問一句了,大佬們閉著一隻眼看程式碼不累嗎
讓我們先簡單明了的來解釋一下上面的程式碼
首先foo()實際上是由window調用的
由於普通函數this指向調用他的對象,所以foo中的this實際上指向的window
而此時又相當於是window調用了bar函數,所以bar裡面的this也是指向window
此時,實際上要輸出的是window.a,而在window這個全局對象上並沒有a這個屬性,所以輸出了undefined
現在我們回到最開始的樣子,並在window對象上綁定一個a屬性
結果輸出:我是window上的a屬性
這裡特別注意一點,可能有的同學會疑問為什麼是輸出undefined,而不是輸出not defined呢?
因為JS訪問對象上未定義的屬性會返回undefined,而訪問未聲明的變數時則會拋出not defined。要是你還想再深究原因的話,明人不說暗話,我目前的水平也究不動,感覺是和引擎內部的實現有關,有知道的老鐵們可以在我頭上拍三下,夜深人靜的時候我去你房裡我們深入研究一波