JavaScript实现显示函数调用堆栈的方法


Posted in Javascript onApril 21, 2016

本文实例讲述了JavaScript实现显示函数调用堆栈的方法。分享给大家供大家参考,具体如下:

许多大型的JavaScript应用程序间的函数调用关系是非常复杂的,在开发或者调试过程中,经常需要跟踪某个函数是由哪些函数调用后才触发执行的,弄清楚这些函数的调用顺序对我们理解代码的数据流向是非常重要的。

Firebug提供了console.trace()来显示函数堆栈,在需要调试的地方加上下面的一行代码就能显示该函数调用时的上下文关系。IE6就没有这么方便了,它没有提供显示函数堆栈的工具,当不可避免的需要在IE6下调试代码时,使用下面的代码能够显示函数堆栈(建议将下面的JavaScript代码保存为console.trace.js,通过外部引入js的方式引用到页面):

JAVASCRIPT代码如下:

/**
* 获取函数名称
*
* @param {Function} func 函数引用
* @return {String} 函数名称
*/
function getFunctionName(func) {
  if ( typeof func == 'function' || typeof func == 'object' ) {
    var name = ('' + func).match(/function\s*([\w\$]*)\s*\(/);
  }
  return name && name[1];
}
if (!('console' in window)) {
  window.console = {};
}
if (!console.trace) {
  /**
   * 显示函数堆栈<br/>
   * 为了和Firebug统一,将trace方法添加到console对象中
   *
   * @param {Function} func 函数引用
   *
   * @example
function a() {
b();
}
function b() {
c();
}
function c() {
d();
}
function d() {
console.trace();
}
a();
   */
  console.trace = function() {
    var stack = [],
      caller = arguments.callee.caller;
    while (caller) {
      stack.unshift(getFunctionName(caller));
      caller = caller && caller.caller;
    }
    alert('functions on stack:' + '\n' + stack.join('\n'));
  }
};

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript:文字不间断向左移动的实例代码
Aug 08 Javascript
JS设置获取cookies的方法
Jan 26 Javascript
巧用局部变量提升javascript性能
Feb 24 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
Dec 04 Javascript
JS设置下拉列表框当前所选值的方法
Dec 22 Javascript
jquery select2的使用心得(推荐)
Dec 04 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
Dec 28 Javascript
微信网页授权并获取用户信息的方法
Jul 30 Javascript
Vue 项目分环境打包的方法示例
Aug 03 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
Nov 08 Javascript
原生js实现的移动端可拖动进度条插件功能详解
Aug 15 Javascript
JavaScript获取某一天所在的星期
Sep 05 Javascript
JS实现队列与堆栈的方法
Apr 21 #Javascript
JS、jQuery中select的用法详解
Apr 21 #Javascript
jQuery中iframe的操作(点击按钮新增窗口)
Apr 20 #Javascript
JS生成某个范围的随机数【四种情况详解】
Apr 20 #Javascript
浅析JS动态创建元素【两种方法】
Apr 20 #Javascript
纯JS代码实现一键分享功能
Apr 20 #Javascript
JavaScript动态生成二维码图片
Apr 20 #Javascript
You might like
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
关于PHP递归算法和应用方法介绍
2013/04/15 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
php中 $$str 中 &quot;$$&quot; 的详解
2015/07/06 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
js 无提示关闭浏览器页面的代码
2010/03/09 Javascript
为Extjs加加速(javascript加速)
2010/08/19 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
你有必要知道的10个JavaScript难点
2017/07/25 Javascript
详解JavaScript的BUG和错误
2018/05/07 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
python字典序问题实例
2014/09/26 Python
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
儿童学习python的一些小技巧
2018/05/27 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
Python实现中英文全文搜索的示例
2020/12/04 Python
python常量折叠基础知识点讲解
2021/02/28 Python
html5 canvas 使用示例
2010/10/22 HTML / CSS
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
女方婚礼新郎答谢词
2014/01/11 职场文书
大学生工作自荐书
2014/06/16 职场文书
爬山的活动方案
2014/08/16 职场文书
500字小学生检讨书
2015/02/19 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
pyqt5打包成exe可执行文件的方法
2021/05/14 Python
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技