동일한 인자에 대해서는 항상 동일한 값을 리턴하고 함수 외부에 어떠한 영향도 미치지 않는 함수를 말한다.
함수에서 값을 반환하는 일 외에 함수 외부와 상호작용하여 부가적인 작업을 수행할 때 그 함수는 사이드 이펙트가 있다고 한다.
사이드 이펙트 예
- Ajax, setTimeout, console.log 등 호출이 모두 사이드 이펙트이다.
- 함수 내부를 벗어나 외부와 상호 작용을 하기 때문이다.
- Ajax, setTimeout 같은 함수들은 브라우저 API를 사용하는 일이고, console.log 는 브라우저의 콘솔창에 문자열을 출력하는 함수이다.
객체나 배열 등의 데이터 구조를 생성한 후 그 데이터 구조를 변경할 수 없는 것
기본 객체가 불변
자바스크립트 불변성
기본 데이터 타입 (primitive type)인 숫자, 문자열, 불리언, null, undefined 와 같은 값들은 불변값으로 취급한다.
이들은 생성된 이후에 변경될 수 없다.
순수함수를 제작하기 위해서 데이터의 불변성을 유지하는 것이 중요하다.
함수의 전달자로 참조자료형이 전달되는 경우, 의도치 않게 해당 객체 자체를 바꾸는 사이트 이펙트를 만들 수도 있고, 이는 데이터의 불변성을 손상시킵니다.
배열의 불변성을 보장하는 메서드 : map, filter, reduce