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 相关文章推荐
jquery多浏览器捕捉回车事件代码
Jun 22 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
Apr 07 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
Aug 15 Javascript
基于JQuery实现图片轮播效果(焦点图)
Feb 02 Javascript
微信开发 微信授权详解
Oct 21 Javascript
微信小程序  生命周期详解
Oct 27 Javascript
基于JavaScript实现熔岩灯效果导航菜单
Jan 04 Javascript
彻底解决 webpack 打包文件体积过大问题
Jul 07 Javascript
jQuery获取table表中的td标签(实例讲解)
Jul 28 jQuery
jQuery 利用ztree实现树形表格的实例代码
Sep 27 jQuery
elementUI中Table表格问题的解决方法
Dec 04 Javascript
JS实现长图上下滚动效果
Mar 19 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
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
浅析PHP的ASCII码转换类
2013/07/05 PHP
php抓取网站图片并保存的实现方法
2015/10/29 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
tp5(thinkPHP5框架)使用DB实现批量删除功能示例
2019/05/28 PHP
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
2013/08/28 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
2014/12/08 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
javascript实现表单提交后,提交按钮不可用的方法
2015/04/18 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
Bootstrap模态框使用详解
2017/02/15 Javascript
javaScript+turn.js实现图书翻页效果实例代码
2017/02/16 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
django 发送手机验证码的示例代码
2018/04/25 Python
python3.6环境安装+pip环境配置教程图文详解
2019/06/20 Python
Python调用.NET库的方法步骤
2019/12/27 Python
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
Clearly新西兰:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
日常奢侈品,轻松购物:Verishop
2019/08/20 全球购物
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
党员自我评价分享
2013/12/13 职场文书
《三峡》教学反思
2014/03/01 职场文书
厕所文明标语
2014/06/11 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
停车场管理制度范本
2015/08/05 职场文书
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫