网站首页 > 技术文章 正文
调用栈是解释器(就像浏览器中的JavaScript解释器)追踪函数执行流的一种机制。当执行环境中调用了多个函数函数时,通过这种机制,我们能够追踪到哪个函数正在执行,执行的函数体中又调用了哪个函数。
- 每调用一个函数,解释器就会把该函数添加进调用栈并开始执行。
- 正在调用栈中执行的函数还调用了其它函数,那么新函数也将会被添加进调用栈,一旦这个函数被调用,便会立即执行。
- 当前函数执行完毕后,解释器将其清出调用栈,继续执行当前执行环境下的剩余的代码。
- 当分配的调用栈空间被占满时,会引发“堆栈溢出”。
function greeting() { // [1] Some codes here sayHi(); // [2] Some codes here } function sayHi() { return "Hi!"; } // 调用 `greeting` 函数 greeting(); // [3] Some codes here
上面的代码将这样执行:
- 忽略前面所有函数,直到greeting()函数被调用。
- 把greeting()添加进调用栈列表。
- 执行greeting()函数体中的所有代码。
调用栈列表: - greeting
4.代码执行到sayHi()时,该函数被调用。
5.把sayHi()添加进调用栈列表。
6.执行sayHi()函数体中的代码,直到全部执行完毕。
调用栈列表: - greeting - sayHi
7.返回来继续执行greeting()函数体中sayHi()后面的代码。
8.删除调用栈列表中的sayHi()函数。
9.当greeting()函数体中的代码全部执行完毕,返回到调用greeting()的代码行,继续执行剩余JS代码。
调用栈列表: - greeting
10.删除调用栈列表中的greeting()函数。
一开始,我们得到一个空空如也的调用栈。随后,每当有函数被调用都会自动地添加进调用栈,执行完函数体中的代码后,调用栈又会自动地移除这个函数。最后,我们又得到了一个空空如也的调用栈。
猜你喜欢
- 2024-11-08 豫MC589、豫M26928、豫MDN311......这2266辆车已达报废标准,请车主尽快办理注销!
- 2024-11-08 西地中海上的“隐形杀手”(二) 地中海西西里岛
- 2024-11-08 .......... ............电脑怎么打出来
- 2024-11-08 西地中海上的“隐形杀手”(三) 地中海西岸
- 2024-11-08 追逐人体的可怕“电光” 人追逐着幻光
- 2024-11-08 SUN电比例直动式溢流型减压阀PRDP-MDN-224
- 2024-11-08 西地中海上的“隐形杀手”(一) 西地中海文明
- 2024-11-08 5.20,点燃爱的火花 点燃你的爱完整版
- 2024-11-08 分享一本SMC气缸选型手册电子版,你该会的基础选型——气缸篇
- 2024-11-08 一眼心动的青提养乐多??好喝成这样不要命啦
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-