- 하나의 단위로 실행되는 집합.

- 모든 함수에는 바디가 존재하며, 함수 바디는 함수를 구성하는 문의 모음.


function say() {

...

}


- 이와 같은 형태: 함수 선언. 하지만, 선언을 한다고 실행이 되지는 않는다.

- 함수를 실행(호출)할때는 함수 이름 뒤에 ()를 쓴다.


반환 값(Return Value)


- 함수 바디 안에서 return 키워드를 사용하면 진행되던 함수를 즉시 종료하고 값을 반환한다.

- 이 값을 반환값이라 부른다.


호출과 참조


- 함수도 객체(Object)

- 다른 객체와 마찮가지로 넘기거나 할당이 가능함.

- 함수 식별자 뒤에 괄호를 쓰면 함수를 호출한다고 하고, 그 함수는 실행됨.

- 함수 식별자 뒤에 괄호를 쓰지 않으면 다른 값과 마찮가지로 함수를 참조하는 것. 그 함수는 실행 X

- 함수를 참조로 써서 다른 변수에 할당하면 그 다른 변수로도 함수를 호출하는 것이 가능하게 됨.

- 함수를 변수뿐만 아니라 객체 프로퍼티 또는 배열 요소로도 할당할 수 있음.


예를 들어, function a() { ... } a라는 함수가 있다. 


a(); // 이것은 함수 호출. a 함수가 실행되며, 반환값도 존재한다(없을 수도 있지만)

a;   // 이것은 함수 참조. 사용방법은 다음과 같다.


const func = a;  

func();


이처럼 함수 a를 func변수에 할당할 수 있다. 이렇게되면 func()으로도 a(); 와 동일한 결과가 출력된다.


함수와 매개변수


- 함수를 호출할때 정보를 같이 전달하는 경우 매개변수(Argument, Parameter)를 사용.

- 매개변수는 함수가 호출되기 전에는 존재하지 않는다. 호출되면 진정한 '실제 매개변수'가 됨.

- 실제 매개변수는 일단 변수와 비슷하지만, 함수 바디 안에서만 존재함.

- 원시 값을 갖은 변수가 함수 안에, 밖에 동일한 변수가 있을때,
  함수 안에서 변수가 변경되더라도 외부 변수는 변경되지 않음. 즉, 이름은 같지만 다른 개체 

- 객체의 경우, 함수 안에, 밖에 동일한 객체가 있을때,

  함수 안에서 객체가 변경되면 외부에 선언된 객체도 변경됨. 즉, 같은 객체를 참조하므로 동일함.

  (참조한다 = 가리킨다)

- 이것이 원시 값과 객체의 핵심적인 차이점.


정리하면, 원시 값을 담은 변수는 수정할 수 있지만 원시값 그 자체는 바뀌지 않는다.

반면, 객체는 변할 수 있다.

   

- 다른 언어들은 매개 변수의 갯수가 다르면 다른 함수로 간주함.

- 자바스크립트는 차이가 없다. 함수가 있다면 매개변수를 몇 개를 전달하든 같은 함수로 간주함.

- 즉, 어떤 함수를 호출하던지 그 함수에 정해진 매개변수 숫자와 관계없이 전달 가능.

- 정해진 매개변수에 값을 전달하지 않으면 undefined가 할당됨.


Posted by sungho88
,