Здравейте, отново прочетохме за чистите и нечистите функции в тази статия.



Говорихме за това, че чистите функции не съдържат външно състояние и чистите функции също не дават никакви странични ефекти.

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

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

Погледнете този код, ние предаваме външно състояние на num на функция updateNum. Тази функция updateNum ще върне newNumber = 2+ 4, 6. И стойността на num няма да бъде променена.

Как е възможно? -

Първо взехме 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 се променя, ако променяме числата, но защо? Тъй като numbers е заел само референцията (паметта) на 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)

Това е от моя страна по темата . Ако имате някакви съмнения, моля, коментирайте това.