簡體   English   中英

什么時候將函數添加到調用堆棧?

[英]When does a function get added to the call stack?

可以說我們有一系列在全局范圍內執行的函數,如下所示:

function second() {}

function first() {
  second();
}

first();

什么時候第一次添加到調用堆棧?

它是在調用時添加的,還是調用 之后添加的(並且執行上下文現在位於秒內 )?

調用函數時,會將其“添加到堆棧中”。 雖然在ECMAScript第5版中未指定“調用堆棧”實現,但它確實在10.3執行上下文中定義了虛擬行為:

當控制權轉移到ECMAScript可執行代碼時,控制權正在進入執行上下文。 活動執行上下文在邏輯上形成一個堆棧。 此邏輯堆棧上的最高執行上下文是運行中的執行上下文[即 當前正在運行的功能]。 每當控制權從與當前正在運行的執行上下文關聯的可執行代碼轉移到與該執行上下文不關聯的可執行代碼時,都會創建一個新的執行上下文。 新創建的執行上下文被壓入堆棧,並成為正在運行的執行上下文。

從技術上講,不是函數是堆棧的一部分,而是從調用函數創建的執行上下文

這也與更通用的調用堆棧概念一致,其中活動/當前功能上下文也是堆棧的一部分。

在計算機科學中,調用堆棧是一種堆棧數據結構,用於存儲有關計算機程序的活動子例程 (包括當前正在運行的子例程)的信息。細節通常是隱藏的,並且在高級編程語言中是自動的。

使用此定義還可以確保函數永遠不會“脫離堆棧”運行-與其他語言/環境 JavaScript開發人員工具中的這種概念一致。

function second() {/* 3rd code here will be executed once second is called */}

function first() {
  // 2nd code here will be executed before second(); is called
  second();
  // 4th code here will be executed after second(); is called and all its code has been executed
}

// 1st code here will be executed before anything is called
first();
// 5th code here will be executed when everything has been called.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM