面试的时候出了一道关于函数防抖的题,写的差不多,但是那个this指向一支不对。
<input type="text" id="n"/> <script> var n1=document.querySelector("#n"); n1.addEventListener("keyup",de(function(){ console.log(this.value); },2000),false); function de(fn,delay){ var timer; return function(){ clearTimeout(timer); timer=setTimeout(fn.bind(n1),delay); } } </script>
当时面试题是没有de这个函数内容的,让补充这个内容,上面都是固定的,填充函数。
我当时那个fn,我想着用一个apply,或者call去改变this指向。但是忽略了apply,call和bind的区别了。
apply,call是一个立即调用。
而bind返回的是一个函数。所以bind想做成和call,apply一样的效果应该是在后面加一个() 的调用的符号。
说说为啥指向n1,
当fn执行的时候,你的那个this.value就是要取#n1中的value值,所以你应该绑定n1的值,this应该指向,N1.