如何实现无参数且不依赖外部作用域的JavaScript箭头函数调用次数统计?
实现无参数、无外部依赖的调用计数箭头函数
这确实是个巧妙的问题!要满足“无参数、不依赖外部作用域”的要求,我们可以利用JavaScript里一个容易被忽略的特性:函数本身就是对象,对象可以拥有自定义属性——我们完全可以把计数存储在函数自身的属性中。
具体实现
这里有个简洁的箭头函数实现:
const trackCallCount = () => { // 初始化或自增计数,直接存在函数自身的count属性上 trackCallCount.count = (trackCallCount.count ?? 0) + 1; return trackCallCount.count; };
工作原理
- 每次调用
trackCallCount()时,我们会访问函数自身的count属性:如果属性还没初始化(第一次调用时),就用??运算符把它设为0,然后自增1;后续调用直接自增即可。 - 这个实现完全符合要求:没有接收任何参数,也没有引用外部作用域的变量——计数状态完全绑定在函数对象本身,不属于外部作用域。
调用示例
trackCallCount(); // 返回 1 trackCallCount(); // 返回 2 trackCallCount(); // 返回 3 // 即使不调用函数,也能直接查看当前计数 console.log(trackCallCount.count); // 输出 3
计数的存储位置
运行时,count作为trackCallCount函数对象的一个属性,存储在内存的函数对象实例中。只要这个函数对象没有被JavaScript的垃圾回收机制回收(比如仍然有变量引用它),这个计数就会一直保留;即使函数调用结束,只要函数本身还存在,计数数据就不会丢失。
内容的提问来源于stack exchange,提问作者Huy Le
相关产品推荐
相关产品推荐

