Почему я могу получить объект события из аргумента из дескриптора события прокрутки, который передается в замыкание в JavaScript - PullRequest
0 голосов
/ 29 марта 2019

Я запутался в аргументах в замыкании. Аргументы - это объект типа массива, доступный внутри функций, который содержит значения аргументов, переданных этой функции. Согласно этому правилу, само замыкание вообще не имеет аргументов. поэтому аргументы перед 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);
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...