Привет! Снова мы прочитали о чистых функциях и нечистых функциях в этой статье.
Мы говорили о том, что чистые функции не содержат никакого внешнего состояния, и чистые функции также не дают никаких побочных эффектов.
Подумайте о том, что есть заданный сценарий, в котором вы должны принять внешнее состояние в своей функции, но если вы изменяете функцию, это не изменит внешнее состояние. Это не невыполнимая задача. Можем попробовать это реализовать.
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)
Это с моей стороны по теме. Если у вас есть какие-либо сомнения, пожалуйста, прокомментируйте это.