FrontEngineer JungBam
순수 함수 본문
순수 함수란 결국 외부에서 참조되는 값이 결과에 영향을 미치지 않는 함수를 말한다.
const a = 1
const add = (b,c) => a + b + c
위의 코드에서 add함수는 a라는 값을 참조하여 연산한 값을 리턴하는데 이렇다면 다른 곳에 불려갔을 때에는 a값이 없기 때문에 에러가 날 것이다. 즉, 이 함수의 컨텍스트로만 동작했을 때에 함수가 제대로 동작하지 않는 것이다.
const add = (a, b, c) => a + b + c
위의 코드에서 함수는 어디에서 불러오더라도 인자가 제대로 들어오는한 문제없이 동작한다. 위 함수는 순수함수이다.
한가지 경우를 더 보자.
const add = (a, b) => {
const c = 3
return a + b + c
}
이 함수 또한 어디에서 불려오더라도 이상없이 동작한다. 이 함수 또한 순수 함수인 것이다.
함수의 사이드 이펙트에서 선언되는 값들은 함수의 선언 위치에 따라서 달라진다. 즉, 사이드 이펙트에서 실행되는 코드로 인한 영향이 있다면 그것은 순수함수가 아닌 것이다.
const addminus = (a , b) => {
const c = 2
const result = () => a + b - c
return result()
}
이 result는 순수함수일까? 정답은 그렇다이다. 어디에서 호출되더라도 그 값이 동일하게 동작하기 때문이다. result를 반환하도록 해서 클로저로 만들고 클로저는 순수함수일지 생각해보자.
const addminus = () => {
const c = 2;
const result = (a, b) => a + b - c;
return result;
};
const add = addminus();
이 result를 반환받아 addminus라는 함수가 생애주기가 마감하더라도 그 안에 c 변수를 참조하는 클로저를 만들어봤다. 그럼 이 때에 이 클로저를 반환받은 add는 순수함수인가? 정답은 그렇다. 이 add를 어디에서 실행하더라도 결국 값은 동일할 것이고 참조하는 변수 또한 같을 것이다.
반응형
'자바스크립트 개념' 카테고리의 다른 글
javascript 메소드에 대한 고찰, slice() 의 활 (0) | 2023.11.12 |
---|---|
max-age와 expires (0) | 2023.03.01 |
this 바인딩의 경우의 수 (0) | 2023.02.24 |
매개변수(parameter)와 인수(argument), 그리고 arguments (0) | 2023.02.22 |
호이스팅과 TDZ (0) | 2023.02.22 |
Comments