关于JS调用栈的一些总结
2019-11-13 18:13
1486 查看
调用栈
我们知道JavaScript是一种解释性的脚本语言,浏览器在运行JS脚本时按照顺序从上往下逐行解释。
调用栈是解释器追踪函数执行流的一种机制。当执行环境中调用了多个函数函数时,通过这种机制,我们能够追踪到哪个函数正在执行,执行的函数体中又调用了哪个函数。
- 当运行到一个函数时,解释器就将该函数添加到栈顶并执行;
- 当调用栈中执行的函数还调用了其他函数,那么新函数也将会被添加到调用栈,一旦这个函数被调用,便会立即执行;
- 当前函数执行完毕后,解释器将其清出调用栈,继续执行当前执行环境下的剩余代码;
- 当分配的调用栈空间被占满时,会引发“堆栈溢出”;
接下通过一个例子来了解调用栈:
function multiply(x, y) { return x * y; } function printSquare(x) { ... var s = multiply(x, x); console.log(s); } printSquare(5);
当执行上述代码时,调用栈的变化如下:
- 把printSquare()添加到调用栈;
- 执行把printSquare函数,代码执行到multiply()时,把multiply()添加到调用栈;
- multiply函数执行完,将他从调用栈移出;
- 执行console.log方法,并把该方法添加到调用栈
- 删除调用栈中的console.log方法
- printSquare执行完毕,删除调用栈中的printSquare
一开始,我们得到一个空空如也的调用栈。随后,每当有函数被调用都会自动地添加进调用栈,执行完函数体中的代码后,调用栈又会自动地移除这个函数。最后,我们又得到了一个空空如也的调用栈。
- 异常追踪
当异常发生的时候,通过调用栈能够追踪到异常发生的位置
function foo() { throw new Error('SessionStack will help you resolve crashes :)'); } function bar() { foo(); } function start() { bar(); } start();
相关文章推荐
- 关于MFC中CDHtmlDialog嵌入flash和调用JS一些技术总结
- 关于联通充值项目的Android与JS调用,及平台调用的总结
- 关于jquery 的ajax调用的一些总结(记录插入数据库成功,但ajax返回false)
- 关于js的一些总结
- 关于ASPCMS标签调用的一些总结
- 关于对js从服务器端取到的值进行函数调用的总结
- js 关于node节点的一些总结
- 关于Vue.js的一些总结(1)
- (转)一些js 调用ActiveXObject 总结
- 收集关于angular与JS的一些常见问题 总结
- 关于js设计模式的一些总结和理解
- 关于Vue.js的一些总结(2)
- 最近在ArcGIS Engine开发中关于调用gp工具过程出现COM 组件的调用返回了错误 HRESULT E_FAIL 错误的解决方法 和 学习oracle中遇到的一些问题总结
- 关于cometd的一些经验总结-js端
- 今日收获总结(关于存储过程时间查询的一些方法以及字段截取的函数及调用示例)
- 关于html,servlet、css、js一些总结
- 关于js运动的一些总结
- 关于JS解析机制、作用域的一些总结
- js关于事件的一些总结(系列一)
- 关于Java对相对目录的文件读写和调用方法的一些总结