javascript函數呼叫

理解全域環境以及知道環境是如何創造與執行的之後
接下來要講的是函數了
因為函數與前面所提有很特殊的關係

首先來說執行堆
這裡會提到當我們在呼叫函式時會發生什麼事?
(呼叫函式是指我們執行了 函數名稱() 這行的程式碼,請注意有括號)

以下是一段簡單的程式碼
會從javascript引擎如何執行開始講起

function b() {
    console.log("b function exec.")
}

function a() {
    b()
}

a()

當執行以上程式碼的時候
javascript引擎第一個會做的事情是先創造全域的執行環境
創造this以及全域物件,並將函數放進記憶中

執行到a()這行時,會呼叫函數
當javascript執行函數的時候
會創造一個新的執行環境於執行堆上
這個執行環境有自己的記憶體空間給變數和函數
並一樣會歷經創造的階段
然後逐行執行程式
在a函數中”呼叫”了b函數
這時候,a函數會停止執行
創造另一個執行環境
然後執行

b函數創造了新的執行環境於執行堆上
並一樣的有創造階段的過程並逐行執行

當b執行結束,b的執行環境就會離開執行堆
最後換a函數執行完離開執行堆

javascript是synchronize的
因此現在執行的程式就是在執行堆的最上層(也是現在的執行環境)
與程式碼的物理位置無關
這時候的this也會指向目前的執行環境

每當一個函數被呼叫
一個新的執行環境就會進入執行堆
這就是在javascript中
使用函數的重要概念

佶曰:就算是一個小函數,後面也是有大理論

發佈留言