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 相关文章推荐
js获取当月最后一天实例代码
Nov 19 Javascript
jquery事件重复绑定的快速解决方法
Jan 03 Javascript
javascript中if和switch,==和===详解
Jul 30 Javascript
JS中的数组方法笔记整理
Jul 26 Javascript
Jil,高效的json序列化和反序列化库
Feb 15 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
Apr 04 Javascript
jQuery实现动态显示select下拉列表数据的方法
Feb 05 jQuery
webpack+react+antd脚手架优化的方法
Apr 02 Javascript
es6数值的扩展方法
Mar 11 Javascript
JQuery中DOM节点的操作与访问方法实例分析
Dec 23 jQuery
Vue使用axios引起的后台session不同操作
Aug 14 Javascript
解决await在forEach中不起作用的问题
Feb 25 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在window iis的莫名问题的测试方法
2013/05/14 PHP
php define的第二个参数使用方法
2013/11/04 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
utf8的编码算法 转载
2006/12/27 Javascript
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
JavaScript实现复制功能各浏览器支持情况实测
2013/07/18 Javascript
checkbox设置复选框的只读效果不让用户勾选
2013/08/12 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
深入浅析JavaScript中的3DES
2016/08/24 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
Vue组件之极简的地址选择器的实现
2018/05/31 Javascript
解决Layui数据表格显示无数据提示的问题
2019/11/14 Javascript
查找Vue中下标的操作(some和findindex)
2020/08/12 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
js实现Element中input组件的部分功能并封装成组件(实例代码)
2021/03/02 Javascript
Python引用类型和值类型的区别与使用解析
2017/10/17 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
Python实现k-means算法
2018/02/23 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
基于python图像处理API的使用示例
2020/04/03 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
Android面试宝典
2013/08/06 面试题
车间操作工岗位职责
2013/12/19 职场文书
英语专业学生的自我评价
2013/12/30 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
公司离职证明样本
2014/09/13 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
张丽莉观后感
2015/06/16 职场文书
小学教师教育随笔
2015/08/14 职场文书
使用python求解迷宫问题的三种实现方法
2022/03/17 Python
i7 6700处理器相当于i5几代
2022/04/19 数码科技