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 相关文章推荐
JavaScript 组件之旅(四):测试 JavaScript 组件
Oct 28 Javascript
再论Javascript的类继承
Mar 05 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
Apr 11 Javascript
原生JavaScript实现Ajax的方法
Apr 07 Javascript
深入理解JS中的substr和substring
Apr 26 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
Jun 08 Javascript
基于vue2.0动态组件及render详解
Mar 17 Javascript
理顺8个版本vue的区别(小结)
Sep 17 Javascript
bootstrap table合并行数据并居中对齐效果
Oct 17 Javascript
详解超简单的react服务器渲染(ssr)入坑指南
Feb 28 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
Mar 12 Javascript
node事件循环和process模块实例分析
Feb 14 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
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
简单实用的PHP防注入类实例
2014/12/05 PHP
PHP手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
javascript代码运行不出来执行错误的可能情况整理
2013/10/18 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
浅谈react-router HashRouter和BrowserRouter的使用
2017/12/29 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
python实现合并两个排序的链表
2019/03/03 Python
django-初始配置(纯手写)详解
2019/07/30 Python
pytorch 求网络模型参数实例
2019/12/30 Python
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
HTML5 Canvas标签使用收录
2009/07/07 HTML / CSS
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
一夜的工作教学反思
2014/02/08 职场文书
小小商店教学反思
2014/04/27 职场文书
个人求职自荐信范文
2014/06/20 职场文书
会计师事务所实习证明
2014/11/16 职场文书
小学班主任事迹材料
2014/12/17 职场文书
年会邀请函范文
2015/01/30 职场文书
小升初自荐信范文
2015/03/05 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
详解CSS故障艺术
2021/05/25 HTML / CSS
防止web项目中的SQL注入
2021/12/06 MySQL