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 相关文章推荐
脚本安需导入(装载)的三种模式的对比
Jun 24 Javascript
JQuery文字列表向上滚动的代码
Nov 13 Javascript
解决jquery1.9不支持browser对象的问题
Nov 13 Javascript
jQuery中toggleClass()方法用法实例
Jan 05 Javascript
JavaScript程序中的流程控制语句用法总结
May 23 Javascript
基于jQuery实现表格内容的筛选功能
Aug 21 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
Mar 21 Javascript
vue.js 初体验之Chrome 插件开发实录
May 13 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
Sep 18 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
Apr 16 jQuery
layui实现数据分页功能
Jul 27 Javascript
微信小程序实现购物车小功能
Dec 30 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生成静态HTML文档的原理
2012/10/29 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
2015/05/13 PHP
php基于session实现数据库交互的类实例
2015/08/03 PHP
php获取远程文件内容的函数
2015/11/02 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
用JavaScript获取DOM元素位置和尺寸大小的方法
2013/04/12 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
2017/08/23 jQuery
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
JS左右无缝轮播功能完整实例
2019/05/16 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
2019/06/10 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
Python部署web开发程序的几种方法
2017/05/05 Python
浅谈python 线程池threadpool之实现
2017/11/17 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
python实现程序重启和系统重启方式
2020/04/16 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
应用服务器有那些
2012/01/19 面试题
办公室岗位职责
2014/02/12 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
交通事故和解协议书
2015/01/27 职场文书
朋友聚会开场白
2015/06/01 职场文书
零基础学java之循环语句的使用
2022/04/10 Java/Android