zoukankan      html  css  js  c++  java
  • 【转】显示JavaScript函数调用堆栈的方法

      许多大型的JavaScript应用程序间的函数调用关系是非常复杂的,

    在开发或者调试过程中,经常需要跟踪某个函数是由哪些函数调用后才触发执行的,弄清楚这些函数的调用顺序对我们理解代码的数据流向是非常重要的。

    Firebug和Chrome提供了console.trace()来显示函数堆栈,在需要调试的地方加上下面的一行代码就能显示该函数调用时的上下文关系。

    IE6就没有这么方便了,它没有提供显示函数堆栈的工具,当不可避免的需要在IE6下调试代码时,使用下面的代码能够显示函数堆栈

    (建议将下面的JavaScript代码保存为console.trace.js,通过外部引入js的方式引用到页面):

    代码如下:

    /**
    * 获取函数名称
    * @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'));
      }
    };

  • 相关阅读:
    HDU Railroad (记忆化)
    HDU 1227 Fast Food
    HDU 3008 Warcraft
    asp vbscript 检测客户端浏览器和操作系统(也可以易于升级到ASP.NET)
    Csharp 讀取大文本文件數據到DataTable中,大批量插入到數據庫中
    csharp 在万年历中计算显示农历日子出错
    csharp create ICS file extension
    CSS DIV Shadow
    DataTable search keyword
    User select fontface/color/size/backgroundColor设置 字体,颜色,大小,背景色兼容主流浏览器
  • 原文地址:https://www.cnblogs.com/jack2013/p/4465012.html
Copyright © 2011-2022 走看看