You need to enable JavaScript to run this app. JavaScript自包含无参箭头函数实现调用次数统计咨询
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript自包含无参箭头函数实现调用次数统计咨询

原代码的核心问题
  • 函数第一行就执行counter = 0,每次调用都会强制重置计数器,永远累计不出正确的次数
  • 箭头函数没有独立的this指向,代码里的this.counter根本绑定不到你声明的counter变量,拿不到预期值
  • counter未通过let/const/var声明,会自动挂载到全局对象上,既容易被其他代码篡改,也不符合“完全自包含”的要求
可行实现

1. 闭包版(完全密封内部状态,最贴合自包含要求)

把计数器包裹在立即执行函数形成的独立作用域里,外部完全访问不到内部counter,只能通过函数调用获取累计值,不会被意外修改:

const countTimesCalled = (() => {
  let counter = 0;
  return () => {
    counter += 1;
    return counter;
  };
})();

调用效果:第一次调用返回1,第二次返回2,后续以此类推。

2. 函数属性版(思路和你原代码更接近)

利用函数本身是对象的特性,把计数器挂载在函数自身的属性上,仅在第一次调用时做初始化,避免每次重置:

const countTimesCalled = () => {
  // 仅首次调用时初始化计数器
  if (countTimesCalled.counter === undefined) {
    countTimesCalled.counter = 0;
  }
  countTimesCalled.counter += 1;
  return countTimesCalled.counter;
};

这个版本的counter会作为函数的公开属性存在,如果外部特意修改countTimesCalled.counter的值会影响计数,对状态安全要求不高的场景完全可用。

内容的提问来源于stack exchange,提问作者nan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 22:54:01