http://jsfiddle.net/haichao/f...http://jsfiddle.net/haichao/d...第一个 demo 可以正常执行,第二个 demo 没有正常执行。两个 demo 区别:btn.onclick = throttle(function () { console.log(1)
}, 1000)btn.onclick = function () {
throttle(function () { console.log(1)
}, 1000)
}另外关于 throttle 函数的实现中,return 一个 function,这个 function 并没有执行,为什么仍然执行了 fn。求解答。
1 回答
元芳怎么了
TA贡献1798条经验 获得超7个赞
这里的关键在 throttle() 这个函数,我这里先把 throttle() 抄下来
function throttle(fn, wait) { var timer return function(...args) { if (!timer) {
timer = setTimeout(() => {
timer = null
}, wait) return fn.apply(this, args)
}
}
}这个函数的内部过程可以简化描述为
function throttle(fn) { return function() {
fn();
};
}就是说,它返回一个函数,而且返回的这个函数在执行的时候会调用最外面传入的 fn。
第一个 demo 中,onclick 需要赋值一个函数,而 throttle() 返回的就是一个函数,所以 onclick 得到的是 function() { fn(); },点击的时候会执行这个函数,而它会调用 fn()。
第二个 demo 中,onclick 得到的是 functioin() { throttle(); },点击的时候会执行 throttle(),而 throttle()所做的事情只是返回了 function() { fn(); },并没有调用它,所以在你看来它没有正常执行。
添加回答
举报
0/150
提交
取消
