Как редактировать список Todo без использования глобальных переменных Функциональное программирование Vanilla JS - PullRequest
0 голосов
/ 08 марта 2019

Как вы постоянно редактируете массив задач при использовании FP?Я понимаю, что когда вы используете методы массива, такие как .concat (), вы возвращаете копию массива, а не редактируете оригинал.Вот мой оригинальный код, который просто помещает новый todo в массив todo.Это навсегда меняет переменную myTodos, которую мы пытаемся избежать.

let myTodos = []

function addTodo(newTodo) {
  myTodos.push(newTodo)
  return myTodos
}

Я переписал эту функцию следующим образом:

const addTodo = (arr, todoText) => arr.concat(todoText)

Это прекрасно работает, но я не понимаю, каксохранить значение, которое возвращается, когда я должен избегать глобальных переменных.Если я вызову это для добавления второй задачи в мой список, она вернет только эту вторую задачу, поскольку переменная нигде не сохраняется.Я чувствую, что есть очень очевидный способ сделать это, но я просто не могу понять это.

Мои извинения Я все еще очень новичок в мире программирования.Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 08 марта 2019

/*
1) how to avoid global variables?
2) how to not change the original?
3) how to keep the changed

#1 - this is called an Immediately Invoked Functional Expression (IIFE for short)
   What this does is lets us create a "scope" within our script.  Variables we
   create inside it with `var` or `let` or `const`, are not global.  They will
   only exist inside the scope.
*/
    (function(){
        var originalArray = [];
        // #2 - concat does not change the original array
        // #3 - to keep the change, just store it in another variable
        var changedArray = originalArray.concat('me');
        
        // #3 - if I want to make more changes, I use the new variable
        changedArray = changedArray.concat('yet another value');
        
        console.log(originalArray);
        console.log(changedArray);
    }());
...