
=> 객체
따라서 함수도 참조타입이다.
함수의 생김새는 이렇다.
function add(a,b){
return a+b;
}
여기서 a와 b가 인수? 인자? (두개를 구별 짓는 것이 중요하지 않다고 한다.)
를 받고 return에서 값을 반환한다.
만약 반환 하는 값이 없으면 undefined를 반환한다.
함수는 입급객체이기도 하다.
따라서 다음과 같은 특성이 있다고 한다.
일급 객체의 특성
- 상수 또는 변수에 할당될 수 있음
- 다른 함수에 인자로 전달될 수 있음
- 다른 함수의 결과값으로서 반환될 수 있음
함수도 호이스팅이 된다. 따라서 함수 호출문이 선언문보다 먼저 있어도 무관하다.
하지만 상수나 변수에 대입하거나 화살표 함수 안에 넣으면 호이스팅 되지 않는다.
add(1,2);
function add(a,b){
return a+b;
}
이렇게 해도 된다는 의미이다.
만약 add안에 인자나 인수를 하나만 넣는다고 하면
add함수에서 b는 undefined가 된다.
따라서
|| 연산자나 && 연산자로 인자의 존재 여부를 확인할 수 있다.
undefined는 false로 취급되기 때문에 if(!b){} 이런식으로 사용해도 무관하다.
인자를 매번 다른 개수로 받을 경우에 사용하는 방법에는 2가지가 있다.
1. argument 객체 사용
2. spread syntax 사용
arguments는 배열과 같은 객체이다.
그치만 배열은 아니라는 점
또한 화살표 함수 안에서는 arguments 객체를 사용하지 못한다.
그렇다면 화살표 함수는 뭐지?
javascript에서 최근에 나온 기술이다.
보통
function add(){
}
//이런식으로 선언한다면
const add=()=>{}
//이렇게 함수를 선언하는 방식이다.
이 화살표 함수는 this 사용을 권장하지 않는데,
this는 객체의 프로퍼티를 사용하기 위해서 메소드 안에서 사용하는 경우에 쓰이기도 한다.
그렇다면 화살표 함수의 this와 그냥 finction의 this는 어떤 것이 다를까?
=> this가 없는거라고 봐도 무관하다고 한다.
(나중에 포스팅 할 예정)
인자로 함수를 받는 함수이다.
인자로 전달되는 함수이다.
필요한 인자보다 적은 수의 인자를 받으면 나머지 인자를 또 다른 인자로 받는 다른 함수들을 반환하여, 다양한 개수의 인자를 취급할 수 있는 함수를 만드는 방법이다.
callback 함수의 예시는 이렇다.
//setTimeout함수
setTimeout(callback, delay, [arg1], [arg2], ...){}
고차 함수를 이용한 재귀함수를 사용할 때 스코프와 스택을 떠올려서 효율적인 코드를 구현해야한다.
스코프 밖에서 안에 있는 지역변수를 가져다가 쓰려고 하면 가져와지지 않는다.
=> 스코프 포스팅에서 설명했음
또한 함수 안에서 함수 밖에 있는 원시 타입을 인자로 들일 수 있다. 하지만 이 경우에 그 값을 복사해오는 것이기 때문에 함수 밖에서 그 변수를 console.log 찍으면 원래 값이 나온다.
근데 이 방법이 참조 차입을 가져왔을 때 보다 안전하다. 원래의 값에 변화를 주지 않기 때문에
그 말은? 참조 타입은 변화를 준다.
어마무시한 javascript의 함수에 대해서 이렇게 축약해서 공부하면 정복..? 은 아닌 것 같다. 하지만 짧은 시간에 좋은 내용을 담기 위한 선생님이 매우 잘 느껴진다.
그리고 무엇보다 실무 관련해서 설명해주시는 부분 부분이 너무 좋았다.