什么是js的"執行環境",每當函數被調用的時候,就會產生一個新的執行環境,它是運行中的函數的意思,比方說運動員在奔跑的環境中,我們可以把運動員在奔跑的環境中,說成奔跑中的運動員,以此類推說成運行中的函數,行話叫”執行環境“。
下面我們就以一個例子進行分析執行環境對象,以下是執行環境對象的第一輪
以上的這個參數和函數都已被聲明和賦值,並且局部變量已被聲明,這個就是第一輪,接下來就是要執行第二輪
由於在執行環境中可以調用函數,其中會有很多的深度,其中又會設計到很多比較復雜的函數調用以及作用域的問題,下面就以一段代碼簡要的談一下
<script> var global_var; first_function(); function first_function(){ var first_var; second_function(); } function second_function(){ var second_var; } second_function(); </script>
1:首先在調first_function,會在全局執行環境中創建一個新的執行環境,它可以訪問全局執行環境中的對象,還有在first_function中定義的局部變量。
2:在first_function()中調用second_function()時,很多人可能覺得這個既然這個second_function()是在first_function中的,所以就有可能訪問到first_function中的變量,但是這個是恰恰錯誤的,因為在定義函數的時候作用域鏈就固定了,其中second_function的定義不在first_function中,所以是無法訪問first_function中的變量的,盡管他是在其中被調用的。
3:當再次調用second_function時,其執行環境沒有權限訪問先前調用的second_function中的變量,因為實在不同的執行環境中,也就是說,在調用函數時,沒有權限訪問上一次被調用時所創建的局部變量,下一次調用該函數時,也沒有權限訪問這一次調用函數所創建的局部變量,也就是俗稱的不在作用域內。