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入门第一课 jQuery选择符
Mar 14 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
Apr 07 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
Jul 18 Javascript
jQuery中的read和JavaScript中的onload函数的区别
Aug 27 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
Nov 16 Javascript
基于WebUploader的文件上传js插件
Aug 19 Javascript
利用Node.js对文件进行重命名
Mar 12 Javascript
JavaScript设计模式之构造函数模式实例教程
Jul 02 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
Feb 13 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
Apr 11 Javascript
AjaxFileUpload.js实现异步上传文件功能
Apr 19 Javascript
react实现同页面三级跳转路由布局
Sep 26 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实现显示照片exif信息的方法
2014/07/11 PHP
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
js右键菜单效果代码
2007/07/21 Javascript
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
python2.7实现FTP文件下载功能
2018/04/15 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
2020/11/12 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
成品仓管员岗位职责
2013/12/11 职场文书
《广玉兰》教学反思
2014/04/14 职场文书
求职信范文大全
2014/05/26 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
详解flex:1什么意思
2022/07/23 HTML / CSS