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的淡入淡出的特效基础练习
Dec 13 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
Dec 28 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
May 13 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
Oct 16 Javascript
用jquery的方法制作一个简单的导航栏
Jun 23 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
Jun 23 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
Jun 03 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
Jan 06 Javascript
如何从零开始手写Koa2框架
Mar 22 Javascript
vue百度地图 + 定位的详解
May 13 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
May 27 Javascript
在Vuex中Mutations修改状态操作
Jul 24 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通过cookies获取远程网页的指定代码
2013/06/25 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
磁盘垃圾文件清理器python代码实现
2020/08/24 Python
python中partial()基础用法说明
2018/12/30 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
2020/07/02 Python
Django实现微信小程序支付的示例代码
2020/09/03 Python
彻底解决Python包下载慢问题
2020/11/15 Python
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
ORACLE十问
2015/04/20 面试题
房地产管理毕业生自荐信
2013/11/04 职场文书
夏季奶茶店创业计划书
2014/01/16 职场文书
中餐厅主管的职责范文
2014/02/04 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
师德师风剖析材料
2014/09/30 职场文书
大学生就业协议书范本(适用于公司企业)
2014/10/07 职场文书
行政主管岗位职责
2015/02/03 职场文书
自荐信怎么写
2015/03/04 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python