函数计数和跟踪 --- console的count和trace方法

新学到一个小方法,分享一下哦。

使用 console 对象的 trace ⽅法在控制台上输出当前的调用栈,可以追踪⼀个函数的执⾏过程。

当我们想要了解一个函数是如何被其他函数调用的,或者想要查看调用栈中的其他信息时,这个方法非常有用。

使用 console 对象的 count 方法,可以记录某个标签被调用的次数。

<script>
 /**
  * 输出前 n 个斐波那契数列值
  */
  function fib(n) {
    if (n === 0) return;
    // 放在函数内,当这句代码运行时,会输出所在函数的执行次数
    console.count("调用次数");
    // 显示函数调用轨迹(访问调用栈)
    console.trace();
    let a = arguments[1] || 1;
    let b = arguments[2] || 1;
    console.log("fib=" + a);
    [a, b] = [b, a + b];
    fib(--n, a, b);
  }
  fib(3);
</script>

运行结果如下:

console.trace() 方法可以帮助开发者了解函数是如何被调用的,从而更好地调试代码。

然而,原生的 trace 方法功能相对有限,可能并不满足所有开发者的需求。

原始 trace 方法

function a() {
  b();
}
function b() {
  c();
}
function c() {
  console.trace("从 c 函数开始调用栈跟踪");
}
a();

改进之后的 trace 方法

// 保存原始的 console.trace 方法
const originalTrace = console.trace;

// 扩充后的 trace 方法
console.trace = function (...args) {
  console.log("开始跟踪调用栈..."); // 在调用前输出一条自定义消息
  console.log("时间戳:", new Date().toLocaleString());  // 输出时间戳
  originalTrace.apply(console, args);  // 调用原始的 console.trace 方法
  console.log("结束跟踪调用栈...");    // 在调用后输出另一条自定义消息
  // 还可以添加其他自定义功能
};

// 使用扩充后的 console.trace 方法
function a() {
  b();
}
function b() {
  c();
}
function c() {
  console.trace("从 c 函数开始调用栈跟踪");
}
a();

这样,我们可以实现,在调用栈跟踪的上下文中添加更多的信息,以便更好地理解和分析代码的执行过程。当然,还可以根据自己的需求添加更多的自定义功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/679477.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

韩文图片文字识别,这几款软件轻松驾驭韩语文本

在当今信息爆炸的时代&#xff0c;跨语言交流已成为日常生活和工作中的常态。对于需要处理韩文文本的用户来说&#xff0c;韩文图片文字识别技术无疑是一大福音。今天&#xff0c;就为大家介绍几款优秀的韩文图片文字识别软件&#xff0c;让你轻松驾驭韩语文本&#xff0c;提升…

性能工具之 JMeter 常用组件介绍(二)

文章目录 一、Thread Group二、断言组件1、Response Assertion&#xff1a;响应断言2、Response Assertion&#xff1a;响应断言3、Duration Assertion&#xff1a;响应时间断言4.、JSON Assertion&#xff1a;json断言 一、Thread Group 线程组也叫用户组&#xff0c;是性能测…

【linux根分区扩容】

前言&#xff1a; 今天在安装软件的时候发现我的linux的根分区空间不足了&#xff0c;在网上搜索哈资料解决了。 解决根分区空间不足的问题方法&#xff1a; 第一&#xff1a;用lsblk命令查看 发现还有一些空间不在了。 第二&#xff1a;安装扩容工具&#xff1a; yum inst…

react快速开始(四)-之Vite 还是 (Create React App) CRA? 用Vite创建项目

文章目录 react快速开始(四)-之Vite 还是 (Create React App) CRA? 用Vite创建项目背景Vite 和 (Create React App) CRAVite&#xff1f;Vite 是否支持 TypeScript&#xff1f; 用Vite创建react项目参考 react快速开始(四)-之Vite 还是 (Create React App) CRA? 用Vite创建项…

SpringBoot3依赖管理,自动配置

文章目录 1. 项目新建2. 相关pom依赖3. 依赖管理机制导入 starter 所有相关依赖都会导入进来为什么版本号都不用写&#xff1f;如何自定义版本号第三方的jar包 4. 自动配置机制5. 核心注解 1. 项目新建 直接建Maven项目通过官方提供的Spring Initializr项目创建 2. 相关pom依…

什么是电风扇行情?

“电风扇行情” 是一个金融术语&#xff0c;用于描述证券市场中价格上下波动频繁、幅度较大&#xff0c;但总体趋势不明显的市场状况。   其名称来源于电风扇的扇叶在旋转时&#xff0c;风向不断变化的特征&#xff0c;形象地比喻了市场价格频繁变动但没有明确方向的情景。 …

桥田磁力换模系统|实现模具的自动化快速切换

作为橡塑材料包装及模具专业展会, 历时3天的广州橡塑展在广交会展中心圆满落幕。本次展会桥田智能携桥田快换盘、桥田工业连接器、桥田抓取系统以及新产品桥田MMC磁力换模系统四大产品系列亮相。同时利用动态演示、静态展示以及协作机器人互动等方式&#xff0c;多角度展示了桥…

两种参与茶树O-甲基化儿茶素生物合成的O-甲基转移酶的特征分析-文献精读20

Characterization of two O-methyltransferases involved in the biosynthesis of O-methylated catechins in tea plant 两种参与茶树O-甲基化儿茶素生物合成的O-甲基转移酶的特征分析 茶树三维基因组-文献精读19 比较转录组分析揭示了116种山茶属(Camellia)植物的深层系统…

大模型Chain-of-Thought(CoT)与Agent基础知识与介绍

大模型Chain-of-Thought&#xff08;CoT&#xff09;与Agent基础知识与介绍 参考文献&#xff1a;Exploring Equation as a Better Intermediate Meaning Representation for Numerical Reasoning of Large Language Models 仓库&#xff1a;https://github.com/zirui-HIT/Br…

基础篇04——多表查询

多表关系 一对多 多对多 多对多是通过中间表实现的 -- 创建学生表 create table student (id int auto_increment primary key comment ID,name varchar(10) comment 姓名,no varchar(3) comment 学号 ) comment 学生表;insert into student values (null, 黛绮丝, 001),(…

计算机基础(2)——冯诺依曼体系结构

&#x1f497;计算机基础系列文章&#x1f497; &#x1f449;&#x1f340;计算机基础&#xff08;1&#xff09;——计算机的发展史&#x1f340;&#x1f449;&#x1f340;计算机基础&#xff08;2&#xff09;——冯诺依曼体系结构&#x1f340;&#x1f449;&#x1f34…

LeetCode-day02-3067. 在带权树网络中统计可连接服务器对数目

LeetCode-day02-3067. 在带权树网络中统计可连接服务器对数目 题目描述示例示例1&#xff1a;示例2: 思路代码 题目描述 给你一棵无根带权树&#xff0c;树中总共有 n 个节点&#xff0c;分别表示 n 个服务器&#xff0c;服务器从 0 到 n - 1 编号。同时给你一个数组 edges &a…

11 - 员工奖金(高频 SQL 50 题基础版)

11- 员工奖金 -- join和left join的区别 -- 如果是join则右侧的数据有的就插&#xff0c;没的就啥也不干&#xff0c;交白卷&#xff0c;也不留null -- 但是left join让右侧数据在没有对应数据时补上了null select e.name,b.bonus from Employee e left join bonus b on e.empI…

【设计模式】结构型-组合模式

前言 在软件开发中&#xff0c;设计模式是一种被广泛应用的解决问题的方法论。其中&#xff0c;结构性设计模式是一类特别重要的模式&#xff0c;它们用于处理类或对象之间的组合关系&#xff0c;其中之一就是组合模式。组合模式允许客户端统一对待单个对象和对象的组合&#…

新手小白怎么学习接口自动化测试?

接口自动化测试是一种重要的测试技术&#xff0c;对于新手小白来说&#xff0c;学习这个技术需要一定的时间和耐心。在本文中&#xff0c;我将从零开始&#xff0c;详细而规范地介绍如何学习接口自动化测试。 1. 接口自动化测试的基础知识 在开始学习接口自动化测试之前&…

【教学类-13-05】20240604《数字色块图-5*7*8-A4横板-横切》中4班

背景需求&#xff1a; 【教学类-13-04】20230404《数字色块图判断密码是否正确-5*7*8-A4横板-横切》&#xff08;中班主题《我爱我家》)_图案密码色块-CSDN博客文章浏览阅读530次。【教学类-13-04】20230404《数字色块图判断密码是否正确-5*7*8-A4横板-横切》&#xff08;中班主…

270 基于matlab的模糊自适应PID控制

基于matlab的模糊自适应PID控制&#xff0c;具有10页报告。传统PID在对象变化时&#xff0c;控制器的参数难以自动调整。将模糊控制与PID控制结合&#xff0c;利用模糊推理方法实现对PID参数的在线自整定。使控制器具有较好的自适应性。使用MATLAB对系统进行仿真&#xff0c;结…

Python采集数据处理:利用Pandas进行组排序和筛选

概述 在现代数据处理和分析中&#xff0c;网络爬虫技术变得越来越重要。通过网络爬虫&#xff0c;我们可以自动化地从网页上收集大量的数据。然而&#xff0c;如何高效地处理和筛选这些数据是一个关键问题。本文将介绍如何使用Python的Pandas库对采集到的数据进行组排序和筛选…

安徽某高校数据挖掘作业4-5 (与一些碎碎念)

1. 编写程序求函数、、的极限。 解答&#xff1a; import sympy as sp# 定义符号变量 x x sp.symbols(x)# 定义函数 f1 sp.sin(20 * x) / x f2 (1 4 * x)**(2 / x) f3 (1 4 / x)**(2 * x)# 计算极限 limit1 sp.limit(f1, x, 0) limit2 sp.limit(f2, x, 0) limit3 sp…

测绘GIS和遥感领域比较好的公众号有哪些

测绘GIS和遥感领域&#xff0c;微信公众号作为信息传播和知识分享的重要渠道&#xff0c;为从业者提供了一个快速获取行业动态、技术进展和职业发展机会的平台。分享一些在测绘GIS和遥感领域表现突出的公众号推荐&#xff1a; 1. 慧天地&#xff1a;慧天地是一个知名的测绘公众…