Контакты
Местоположение
Украина, Сумская обл., Сумы

Наибольший вклад в теги

Все теги (3)

Лучшие ответы пользователя

Все ответы (8)
  • Можно кто код объяснить?

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


    На скорую руку, я бы это переделал так.
    const argumentsArray = [];
    
    function work(a, b) {
      console.log(a + b);
    }
    
    function loggedArgs(...args) {
      argumentsArray.push(args);
    }
    
    function workAndLog() {
      work(...arguments);
      loggedArgs(...arguments);
    }
    
    workAndLog(1, 2); // 3
    workAndLog(4, 5); // 9
    
    for (let args of argumentsArray) {
      console.log("call:" + args.join()); // "call:1,2", "call:4,5"
    }
    Ответ написан
    8 комментариев
  • Стрелочную или обычную функцию использовать?

    TrueBlackBox
    @TrueBlackBox
    В данном случае без разницы. Разница будет если передавать в листенер отдельную функцию, но это вы узнаете сами позже :)
    Ответ написан
    Комментировать
  • Социальная сеть масштаба facebook на react/react native?

    TrueBlackBox
    @TrueBlackBox
    Facebook и так написан на реакте, он собственно фейсбуком и придуман. Вот, например, для ознакомления.
    https://anyforsoft.com/blog/10-famous-websites-bui...
    Ответ написан
    Комментировать