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 相关文章推荐
一个不错的应用,用于提交获取文章内容,不推荐用
Mar 03 Javascript
js判断IE6/IE7/FF的代码[XMLHttpRequest]
Feb 16 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
Mar 03 Javascript
jQuery判断元素上是否绑定了指定事件的方法
Mar 17 Javascript
浅谈Javascript中substr和substring的区别
Sep 30 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
Apr 20 Javascript
详解angular2封装material2对话框组件
Mar 03 Javascript
基于bootstrap实现收缩导航条
Mar 17 Javascript
微信小程序商城项目之侧栏分类效果(1)
Apr 17 Javascript
微信小程序之电影影评小程序制作代码
Aug 03 Javascript
JavaScript for循环 if判断语句(学习笔记)
Oct 11 Javascript
详解JavaScript 的变量
Mar 08 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 ss7.5的数据调用 (笔记)
2010/03/08 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
2019/10/11 PHP
JScript中的&quot;this&quot;关键字使用方式补充材料
2007/03/08 Javascript
FireFox与IE 下js兼容触发click事件的代码
2008/11/20 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
js propertychange和oninput事件
2014/09/28 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
elementUI中Table表格问题的解决方法
2018/12/04 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
python进阶教程之动态类型详解
2014/08/30 Python
Python 3中的yield from语法详解
2017/01/18 Python
python读取一个目录下所有txt里面的内容方法
2018/06/23 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
使用浏览器访问python写的服务器程序
2019/10/10 Python
Python 音频生成器的实现示例
2019/12/24 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
2014年路政工作总结
2014/12/10 职场文书
公司年会主持词范文!
2019/05/07 职场文书
导游词之长城八达岭
2019/09/24 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
go语言中fallthrough的用法说明
2021/05/06 Golang
Spring Cloud Gateway去掉url前缀
2021/07/15 Java/Android