一个关于闭包防抖的疑惑,望朋友们赐教,感谢:
function fangdou(callback,time){
let timeout
return function(){
if(timeout) clearTimeout(timeout)
timeout = setTimeout(callback, time);
}
}
function con(){
console.log('发起请求')
}
document.addEventListener('input',fangdou(con,2000))
input框输入停止后2s才打印。这个是能够正常实现的,但是如果我改写成:
function fangdou2(){
let timeout
return function(callback,time){
if(timeout) clearTimeout(timeout)
timeout = setTimeout(callback, time);
}
}
function con2(){
console.log('发起请求2')
}
const foo = fangdou2()
document.addEventListener('input',foo(con2,2000))
只是用foo将函数fangdou2先执行了拿到了闭包函数,监听input框时执行foo。但是会出现第一次加载页面时就会自动打印'发起请求2‘’,这个为什么呢?
还有,input框中输入也不会触发函数con2?