• Можно кто код объяснить?

    TrueBlackBox
    @TrueBlackBox
    Swaer, да, ну по крайней мере я сам приблизительно так понял)
  • Можно кто код объяснить?

    TrueBlackBox
    @TrueBlackBox
    Swaer,
    function work(a, b) {
      alert( a + b ); 
    }
    // Создается функция, которая принимает в себя другую функцию
    function spy(func) {
        // Создается обёртка, которая принимает в себя переданные аргументы (a, b)
        function wrapper(...args) {
          // В метод calls функции wrapper, который массив, сохраняются переданные
          // аргументы wrapper.calls.push(args);
          // И здесь вызывается переданная функция, с переданными аргументами.
          // По поводу того, на что указывает this, есть простая памятка:
          // this вызывается на метод перед точкой.
          return func.apply(this, arguments);
        }
        // Сюда сохраняются агрументы
        wrapper.calls = [];
        // В итоге функция Spy возвращает функцию wrapper
        return wrapper;
     }
    // Здесь функция work превращается в spy(work). Как мы помним, функция 
    // spy возвращает функцию wrapper. То есть что происходит:
    // вызывается функция spy(work), work передается внутрь wrapper. 
    // work теперь wrapper, со всеми методами. Это можно проверить в браузере.
    // Введите console.log(work) после этой строчки, и рассмотрите его поближе.
    work = spy(work);
    
    // Теперь смотря на эту функцию, смотрите на wrapper, ибо work = wrapper.
    // Что происходит:
    // в функцию wrapper передаются аргументы (1, 2), они сохраняются внутрь
    // wrapper.calls, и вызывается изначальная функция work что выполняет сложение.
    // Но мы помним что work = wrapper, так что теперь у work есть метод work.calls.
    work(1, 2); // 3
    work(4, 5); // 9
    
    // Вот тут она и вызывается. Как видите, не wrapper.calls, a work.calls.
    for (let args of work.calls) {
      alert( 'call:' + args.join() ); // "call:1,2", "call:4,5"
    }


    Если что-то ещё не совсем понятно, можете уточнить, постараюсь объяснить)
  • Можно кто код объяснить?

    TrueBlackBox
    @TrueBlackBox
    Дмитрий Беляев, если цель создать переиспользуемую функцию - возможно. Но, если рассматривать конкретно данную цель, то мне кажется такое себе. А по поводу полного говнокода - я в JS всего меньше года, но я читал очень много кода. Читал исходники на гитхабе, читал книги, читал курсы/гайды. И я ни разу не видел, чтобы функциям присваивали методы. То, что написано в исходном коде, просто максимально не читаемо, имена подобраны ужасно, и чтобы понять, что тут вообще происходит, приходится просить помощи на форуме. Если же так писать это нормально, и это просто я чего-то не понимаю - это печально.
  • Можно кто код объяснить?

    TrueBlackBox
    @TrueBlackBox
    Дмитрий Лузанов, суть как раз в том, что там не const work = spy(work), а конкретно work = spy(work). В первом случае, вы получите переменную work, внутри которой результат выполнения функции spy(work). А во втором, функция work переопределяется как spy(work). По поводу равноценности тупанул, признаю, была бессонная ночь)
  • Как правильно реализовать localStorage в Redux?

    TrueBlackBox
    @TrueBlackBox
    SerGeGR, есть comments.map not a function, значит либо comments пустой, либо он не в итерируемом формате.
  • Почему немогу сложить indexof в js?

    TrueBlackBox
    @TrueBlackBox
    dimka_lubimka, простите, но тут какая-то каша вместо кода...В for непонятные условия, они не закрыты и так далее. Вы слишком перемудрили, я понимаю, что хочется довести свою мысль до конца, но лично я даже не смог понять задумку...
  • Почему немогу сложить indexof в js?

    TrueBlackBox
    @TrueBlackBox
    function addLetters(...letters) {
      // Объявляем полный алфавит, 26 букв:
      const alphabet = 'abcdefghijklmnopqrstuvwxyz';
      // Изначально объявим sum = 25 чтобы в случае пустого значения получать z:
      let sum = 25;
      // Находим "индекс" переданных букв:
      for (let letter of letters) {
        sum += alphabet.indexOf(letter) + 1;
      }
      // И возвращаем только ту букву, что в итоге делиться на 26,
      // то есть на общее количество букв в алфавите:
      return alphabet[sum % 26];  
    }
    
    console.log(addLetters('a', 'b', 'c')) // f