
함수의 순수성에 대해 설명을 하기 위해서 위와 같이 코드를 작성하였다. sum이라는 함수는 a와 b를 매개변수로 전달하고 a+b+c를 반환한다. 하지만 C는 함수안에 선언되어있는 것이 아닌 함수 밖에 전역으로 선언되었다. 이는 참조 투명성 즉, 함수의 순수성을 해친다. Side-Effects라고도 불린다. 그 이유는 함수안에 선언되어있지 않은 C값에 따라 sum 함수가 반환하는 결과가 달라지기 때문에 sum 함수가 영향을 받기 때문이다.

또 다른 예시를 보면 func 라는 함수는 매개변수로 obj와 input을 받는다. 받은 input을 obj.name에 할당하여 obj라는 객체를 반환한다. 하지만, 위의 예시와 마찬가지로 함수 밖의 어떠한 값을 넣느냐에 따라 함수에 영향을 미치는 결과를 반환하게 된다. 이를 Side-Effects라고도 하지만 Thread-Unsafe라고도 한다. 그렇기 때문에 함수를 만들고 사용할 때 외부의 값에 따라 함수의 값에 영향을 주지 않는 No-Side-Effects와 Thread-Safe에 대해 생각해야한다.

또, 한 가지 고려해야할 점은 함수가 어떻게 작동하고 어떤 값을 넣어야하는지 명확히 알 수 있어야 한다는 점이다. 위의 예시를 보다. addName이라는 함수 명을 통해 name이 무엇이든, name을 더해준다 라는 동작을 하겠구나. 하고 묵시적으로 알 수 있다. 또한 넣어야하는 값을 name이라는 변수명으로 할당하기 때문에 함수를 호출할 때 name에는 내가 더할 name을 작성하면 obj를 반환하겠구나를 한 눈에 알 수 있다.
함수를 선언, 사용할 때 고려해야할 것을 알아보았으면 이번에는 함수를 선언, 사용해보자.

주석을 통해 명시하였지만 이를 풀어서 설명하면, 이를 함수 선언문(Declaration)이라고 한다. 함수의 선언과 정의가 되어있기 때문에 특별한 오류를 발생시키지 않는다.