如何获取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
相关产品推荐
相关产品推荐

