鍍金池/ 問答/HTML/ js生成執(zhí)行環(huán)境時,每一個執(zhí)行環(huán)境生成一個變量對象,內部包含所有本執(zhí)行環(huán)境內部的

js生成執(zhí)行環(huán)境時,每一個執(zhí)行環(huán)境生成一個變量對象,內部包含所有本執(zhí)行環(huán)境內部的變量,那么它如何訪問上一級執(zhí)行環(huán)境中的變量對象呢

訪問上一級執(zhí)行環(huán)境中的變量,那么豈不是要先把當前執(zhí)行環(huán)境彈出棧?

回答
編輯回答
有你在

每個函數(shù)都有自己的運行環(huán)境。

我理解的是當一個代碼在一個環(huán)境中執(zhí)行時,內部會創(chuàng)建變量對象的一個作用域鏈,作用域鏈的作用是保證這段代碼能夠訪問到所有合法的變量和函數(shù)

作用域鏈的前端是當前執(zhí)行中的代碼所在環(huán)境的變量,下一個節(jié)點(下一個變量)是來自外部環(huán)境,再下一個節(jié)點則來自下一個外部環(huán)境,就這樣一直延伸下去,直到串起所有允許訪問的運行環(huán)境,作用域鏈的最后一個對象是全局執(zhí)行環(huán)境的變量對象。

所以我覺得訪問上一級的環(huán)境變量時不需要將當前環(huán)境彈出棧,而是沿著作用域鏈往上依次查詢變量。

如果要在一個函數(shù)中調用其他函數(shù)的話,此時會創(chuàng)建一個新的執(zhí)行環(huán)境,插入當前的棧,等待調用結束后,該活動對象銷毀并彈出棧,執(zhí)行權重新交付給調用它的上一個函數(shù)。

以上闡述僅代表個人觀點,如果有誤,歡迎指正,謝謝。

2018年4月1日 10:17