javascript
为什么 JavaScript 的 this 要这么用?
計算機世界最聰明的地方就在于它是人為的,最愚蠢的地方也正在于此。
——我瞎寫的
已經有太多學習前端的人困于這個無聊的概念了。JavaScript 本就是脫胎于 Java 和 C 的語言,所以這個概念大概只能從 Java 得出。由于 Java 是純粹的面向對象語言,this用來指代當前的類實例。而 JavaScript 先天缺乏 OO 的概念,所以可以說this被異化了。因為 JavaScript 是一等函數,函數本身就是和類同樣的存在,這樣一來其外部調用環境是完全不確定的。所以這將得到規范里的一條約定:
The this keyword evaluates to the value of the ThisBinding of the current execution context.
這說明this綁定的是上下文(而不是作用域,因為上下文是動態的)。我之前看到了別人的文章從規范的角度去看這個問題:
github.com/mqyqingfeng…
但總覺得差點意思。畢竟規范是設計的結果,而不是設計的過程。所幸阮一峰老師在去年剛寫了一篇文章來從我更欣賞的角度分析這個問題:
www.ruanyifeng.com/blog/2018/0…
他指出了一個關鍵是,一等函數相當于直接指向內存的函數指針。這可以解釋另一個例子:
var value = 1;var foo = {value: 2,bar: function () {return this.value;} } console.log((false || foo.bar)()); // 1 復制代碼此時 foo.bar 其實已經被計算(evaluate)了,所以相當于直接于調用一等函數。
PS:這里一等函數是為了說明那些函數可以單獨運行而不需要從類進行訪問。
總結
以上是生活随笔為你收集整理的为什么 JavaScript 的 this 要这么用?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css实现垂直居中的几种方式(布局常用)
- 下一篇: Spring Boot中使用Ribbon