Привет! Снова мы прочитали о чистых функциях и нечистых функциях в этой статье.



Мы говорили о том, что чистые функции не содержат никакого внешнего состояния, и чистые функции также не дают никаких побочных эффектов.

Подумайте о том, что есть заданный сценарий, в котором вы должны принять внешнее состояние в своей функции, но если вы изменяете функцию, это не изменит внешнее состояние. Это не невыполнимая задача. Можем попробовать это реализовать.

const num= 2;
function updateNum(newNumber, number){
    let number_1= number;
    number_1= newNumber;
    newNumber= newNumber+4;
    return newNumber;
}
updateNum(num)

Взгляните на этот код, мы передаем внешнее состояние num функции updateNum. Эта функция updateNum вернет новое число = 2+ 4, 6. И числовое значение не изменится.

Как это возможно ?-

Сначала мы взяли num как внешнее состояние, мы передаем num в функцию, но число было клонировано в number_1, а number_1 возвращается как newNumber. мы сделали операцию добавления к newNumber . Так что нигде я не использую внешнее состояние только для клонирования в новом состоянии.

Могу ли я сказать «это чистая функция»?

Абсолютно да, мы не меняли внешнюю переменную. Хорошо, мы также решили проблему, мы можем определить поведение функции. Если мы передаем num в updateNum , он всегда будет возвращать тот же результат, что и num+4.

Клонирование массива (ES6)

Почему бы нам не рискнуть клонировать массив?

const nums= [1,2]
const numbers= nums
// Now I will try to append the numbers 
numbers.push(3)
//Now 
nums= [1,2,3]
numbers= [1,2,3]

В этом коде цифры меняются, если мы меняем цифры, но почему? Поскольку числа взяли только ссылку (память) nums. Поэтому, если мы добавим какое-либо значение к этой ссылке, оно будет изменено во всех ссылках одной и той же переменной.

Итак, вот способ скопировать значения, а не ссылку. Мы можем использовать операторы распространения для копирования значений массива.

const nums= [1,2]
const numbers= [...nums]
numbers.push(3)
// Now nums and numbers
nums = [1,2]
numbers= [1,2,3]

Есть еще один способ скопировать значения массива.

const nums= [1,2]
const numbers = Array.from(nums)

Это с моей стороны по теме. Если у вас есть какие-либо сомнения, пожалуйста, прокомментируйте это.