You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取JavaScript中传入防抖函数的匿名函数代码?

如何获取防抖函数中传入的匿名函数的源代码?

问题代码

function debounce(a, b, c) {
  var d;
  return function() {
    var e = this,
      f = arguments;
    clearTimeout(d);
    d = setTimeout(function() {
      d = null, c || a.apply(e, f)
    }, b), c && !d && a.apply(e, f)
  }
}

var test = debounce(function(x) {
  alert(x);
}, 500)
console.log(test.toString());

问题描述

期望输出传入的匿名函数代码:

function (x) {alert(x);}

但实际输出的是debounce内部返回的闭包函数代码,而非目标匿名函数的代码。

解决方案

问题核心是test变量指向的是debounce返回的内部闭包函数,而非你传入的目标匿名函数。要获取目标函数的代码,只需让返回的闭包函数保留对原函数的引用即可:

修改debounce函数,为返回的闭包添加一个属性存储原函数:

function debounce(a, b, c) {
  var d;
  // 定义闭包函数
  var debounced = function() {
    var e = this,
      f = arguments;
    clearTimeout(d);
    d = setTimeout(function() {
      d = null, c || a.apply(e, f)
    }, b), c && !d && a.apply(e, f)
  };
  // 给闭包添加属性,指向传入的原函数
  debounced.originalCallback = a;
  return debounced;
}

var test = debounce(function(x) {
  alert(x);
}, 500);
// 通过属性访问原函数并输出其代码
console.log(test.originalCallback.toString());

运行这段代码后,就能得到你期望的目标匿名函数代码。

内容的提问来源于stack exchange,提问作者Leonardo V. Fiorot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:32:12