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 相关文章推荐
Node.js中的模块机制学习笔记
Nov 04 Javascript
javascript中callee与caller的区别分析
Apr 20 Javascript
JavaScript检查数字是否为整数或浮点数的方法
Jun 09 Javascript
jQuery实现点击小图显示大图代码分享
Aug 25 Javascript
Javascript实现的SHA-256加密算法完整实例
Feb 02 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
May 17 Javascript
JS模拟实现方法重载示例
Aug 03 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
Apr 07 Javascript
JS实现调用本地摄像头功能示例
May 18 Javascript
JS实现的类似微信聊天效果示例
Jan 29 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
Sep 11 Javascript
详解JavaScript修改注册表的方法
Jan 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
那些年一起学习的PHP(三)
2012/03/22 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
基于CakePHP实现的简单博客系统实例
2015/06/28 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
Laravel timestamps 设置为unix时间戳的方法
2019/10/11 PHP
不懂JavaScript应该怎样学
2008/04/16 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
js使用递归解析xml
2014/12/12 Javascript
jquery中animate的stop()方法作用实例分析
2015/01/30 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
jQuery表单元素过滤选择器用法实例分析
2019/02/20 jQuery
基于jQuery实现挂号平台首页源码
2020/01/06 jQuery
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
极简的Python入门指引
2015/04/01 Python
Django中URLconf和include()的协同工作方法
2015/07/20 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
python中什么是面向对象
2020/06/11 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
铣工实训报告
2014/11/05 职场文书
社区服务活动报告
2015/02/05 职场文书
酒店温馨提示语
2015/07/14 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript