網上關於執行上下文的文章有很多,關於什麼是執行上下文,很多文章說得很清晰。 我說一下自己的理解。 執行上下文包含三個東西: 1. VO 2. this 3. [[scope]] 為什麼包含這三個東西呢?首先我們要明白,什麼叫做執行上下文。 執行上下文,又叫做執行環境。那麼,什麼是環境呢? 維基百科是 ...
網上關於執行上下文的文章有很多,關於什麼是執行上下文,很多文章說得很清晰。
我說一下自己的理解。
執行上下文包含三個東西:
- VO
- this
- [[scope]]
為什麼包含這三個東西呢?首先我們要明白,什麼叫做執行上下文。
執行上下文,又叫做執行環境。那麼,什麼是環境呢?
維基百科是這樣解釋的:
環境是指相對並相關某項中心事物的周圍事物。
在我們的代碼中,比如每一個函數,就是一段可以執行的代碼。
這段可執行的代碼,就是這個所謂的中心事物。同一個函數,在不同的地方執行,輸出的結果是不一樣的。這個導致輸出結果不同的周圍事物,就是所謂的環境。
假如我們現在有如下一段代碼:
function doSomeThing(a){
console.log(a);
console.log(global);
console.log(this);
}
那麼,當我們執行這一段代碼的時候,會首先輸出a的值,接著輸出全局對象,最後輸出this。
但是,這一段代碼在不同的地方執行,輸出的結果是不一樣的。
比如,當我們的入參a不同的時候,那麼輸出的a就會是不同的。因此,變數就是一個環境。而所有的變數,我們統稱其為變數對象,也就是所謂的VO(variable object)。
另外,在不同的地方,this的指向也是不同的。這是顯而易見的,也是我們前端需要重點掌握的一個知識點。
還有一個[[scope]],這就是作用域鏈,鏈接另一個執行環境的指針。
有了這三個東西,每一個函數就可以明確的知道,自己可以訪問到哪些變數,應該在什麼樣的環境下執行。
這也就是為什麼我們把它叫做執行環境、執行上下文。