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