Я запутался в аргументах в замыкании. Аргументы - это объект типа массива, доступный внутри функций, который содержит значения аргументов, переданных этой функции. Согласно этому правилу, само замыкание вообще не имеет аргументов. поэтому аргументы перед fn.apply (this, a); должны быть пустыми, но на самом деле аргументы равны аргументу функции-обработчика события fn () . почему это случилось?
$(window).on('scroll', throttle(function (e) {
console.log(arguments);
let pageHeight = $('body').height(),
scrollTop = $(window).scrollTop(),
winHeight = $(window).height(),
thresold = pageHeight - scrollTop - winHeight;
if (thresold > -100 && thresold <= 20) {
console.log('end');
}
}));
function throttle(fn, delay = 300) {
let execute = true;
return function () {
if (!execute) {
return;
}
execute = false;
setTimeout(() => {
let a = arguments;
console.log(arguments);// why the arguments is the arguments from fn which is event handle I pass into the closure
fn.apply(this, a);
execute = true;
}, delay);
}
}