@FaTaLcheG

Почему данный код по разному работает?

работает
function f(x){
        alert(x);
      }

      function delay(func, delayTime){
        return function(){
          var savedThis = this;
          var savedArgs = arguments;
           setTimeout(function(){
             func.apply(savedThis, savedArgs);
           }, delayTime);
        }
      }

      var f1000 = delay(f, 1000);
      f1000("Hello");

не работает
function f(x){
        alert(x);
      }

      function delay(func, delayTime){
        return function(){
           setTimeout(function(){
             func.apply(this, arguments);
           }, delayTime);
        }
      }

      var f1000 = delay(f, 1000);
      f1000("Hello");


по сути передаем одно и тоже но результат разный, в чем причина такого поведения?
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
по сути передаем одно и тоже

Вы заблуждаетесь.

Добавляем вызов console.log() и смотрим вывовд
function delay(func, delayTime){
  return function(){
    var savedThis = this;
    var savedArgs = arguments;
    setTimeout(function(){
      console.log(savedThis, this, savedArgs, arguments);  // <---
      func.apply(this, arguments);
    }, delayTime);
  }
}


Почему данный код по разному работает?

Используется разный набор аргументов. А контекст в зависимости от режима.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы