Expressions
value
를 return하는 것. 자바스크립트는 expression을 value로 대체하고 계속 진행한다.
Statements
value
를 return하지 않는 것. 명령, 혹은 지시. if문, for문, while문... 뭔가 액션을 컨트롤하는 문들. 리턴값(value)이 없으므로 변수에 할당할 수도 없다.
parameter (매개변수)
함수의 정의 부분에 나열되어 있는 변수들 (variable)
argument (인자)
함수를 호출할 때 전달되는 실제 값 (value)
파라미터와 인자의 개수가 일치하지 않아도 오류가 나지 않는다. 함수가 실행되면 arguments라는 유사배열객체가 생성된다. 선언한 파라미터보다 더 많은 인자를 넣어 호출할 수 있는데, 이 때 인자는 arguments에 저장된다.
함수를 정의할 때 마지막 파라미터 앞에 ...
를 붙여 함수 호출 시 제공한 모든 나머지 인수를 표준 자바스크립트 배열로 대체.
arguments
는 유사배열객체, rest parameter
는 배열!!! MDN에 두 개념의 차이가 나와있는데 뭔소리인지 잘 모르겠당.ㅎㅎ
...
을 사용해 펼쳐주는 역할. MDN에는 이렇게 소개되어 있다.
전개 구문을 사용하면 배열이나 문자열과 같이 반복 가능한 문자를 0개 이상의 인수 (함수로 호출할 경우) 또는 요소 (배열 리터럴의 경우)로 확장하여, 0개 이상의 키-값의 쌍으로 객체로 확장시킬 수 있습니다.
rest parameter
와 spread operator
가 똑같이 생겨서 헷갈렸(?)었는데 그냥 함수의 파라미터에 spread operator를 쓴 것이 rest parameter였다. 💡 아, 차이점이라면 rest parameter는 함수를 선언(정의)할 때 명시를 해주면 호출 시에 인자를 배열로 만들어주는 것. spread operator는 인자 뿐 아니라 배열, 객체를 얕게 복사할 때도 사용이 가능하다는 것. 약간 쓰임새가 다른 것 같다.
함수를 호출할 때 arguments
에 value가 넘어오는지, reference가 넘어오는지 차이이다. 자바스크립트는 원시 타입이든 참조 타입이든 call by value로 작동한다.
call by value
call by reference