昨天面试的时候让实现一个防抖函数,然后写的如下:
function debounce(fn, delay) {
var timer; // 维护一个 timer
return function () {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(function () {
fn.apply(this, arguments);
}, delay);
// 正确
// timer = setTimeout(() => {fn.apply(this, arguments);}, delay);
};
}
面试官说setTimeout回调里面的那个function需要用箭头函数才没有问题,普通函数和箭头函数的区别在于apply中传入的this和arguments,当时其实没有太理解就照着改了,想求一下这里this指向和argument代指内容的详细的解释,因为我发现网上也有类似的实现,疑惑
箭头函数没有自己的this,也没有自己的arguments,是和上一级的作用域共享this和arguments。
普通的函数声明或者函数表达式,都会在函数体内自动生成this和arguments。