자바스크립트 함수
2018-02-05
1. 호출과 참조
- 자바스크립트에서는 함수도 객체이다.
- 함수 식별자 뒤에 괄호를 쓰면 자바스크립트는 함수를 호출하려 한다고 이해하고, 함수 바디를 실행한다.
- 괄호를 쓰지 않으면 다른 값과 마찬가지로 함수를 참조하는 것이며, 그 함수는 실행되지 않는다.
- 함수를 변수에 할당하면 다른 이름으로 함수를 호출할 수 있음.
- 함수를 객체 프로퍼티에 할당할 수도 있다.
- 호출과 참조 예제
2. 함수와 매개변수
- 함수를 호출하면서 정보를 전달할 떄는 함수 매개변수(argument)를 이용해야 한다.
- 함수를 호출하면 함수 매개변수는 변수 자체가 아니라 그 값을 전달 받는다.
- 자바스크립트는 함수 f가 있다면 호출할 때 매개변수를 한 개 전달하든 열 개 전달하든 같은 함수를 호출한다.
- 정해진 매개변수에 값을 제공하지 않으면 암시적으로 undefined가 할당된다.
- 함수 매개변수 예제
2-1. 원시값 매개변수
- 자바스크립트의 원시값은 원시값을 전달할 때 값이 복사되기 때문에 값 타입(value type)이라고도 말한다.
- 함수 안에서 매개변수에 값을 할당해도 함수 바깥에 있는 어떤 변수에도 아무런 영향이 없다.
- 함수 원시값 매개변수 예제
2-2. 객체값 매개변수
- 객체는 참조타입(reference type)이라 부른다. 객체를 전달할 때 두 변수는 같은 객체를 가리키기 때문이다.
- 하지만 함수 안에서 객체 자체를 변경하면, 그 객체는 함수 바깥에서도 바뀐다.
- 함수 객체 매개변수 예제
2-3. 매개변수 해체
매개변수도 해체할 수 있다.
2-4. 매개변수 기본값
- ES6에서는 매개변수에 기본값(default value)를 지정하는 기능도 추가됨.
- 일반적으로 매개변수에 값을 제공하지 않으면 undefined가 값으로 할당됨.
- 매개변수 기본값 예제
3. 메서드
- 객체의 프로퍼티인 함수를 ‘메서드’라고 불러서 일반적인 함수와 구별함
- 객체에 메서드 추가 예제
4. this
- this는 객체의 프로퍼티인 함수에서 의미가 있다.
- 메서드를 호출하면 this는 호출한 메서드를 소유하는 객체가 된다.
- this 예제
- 중첩된 함수에서 this 사용 예제(잘못된 방법)
- 중첩된 함수에서 this 사용 예제(옳은 방법)
5. 익명 함수
- 함수를 선언하면 함수에 바디와 식별자가 모두 주어지지만, 익명함수에서는 함수에 식별자가 주어지지 않는다.
const g = function f(){ }
- 이런 식으로 함수를 만들면 이름 g에 우선순위가 있다. 함수 바깥에서 함수에 접근할 때는 g를 써야하며, f로 접근하려고 하면 변수가 정의되지 않았다는 에러가 생긴다.
6. 화살표 표기법
- ES6에서 새로 만든 문법. 화살표 표기법은 간단히 말해 function이라는 단어와 중괄호 숫자를 줄이려고 고안된 단축 문법이다.
- 화살표 함수는 this 바인딩을 하지 않고, 메소드 함수가 아닌 곳에 사용하는 것이 적당하다.
- 화살표 함수에는 세 가지 단축 문법이 있다
- function을 생략해도 된다
- 함수에 매개변수가 단 하나 뿐이라면 괄호(())도 생략할 수 있다.
- 함수 바디가 표현식 하나라면 중괄호와 return 문도 생략할 수 있다.
- 화살표 함수는 항상 익명이다. 화살표 함수도 변수에 할당할 수 있지만, function 키워드처럼 이름 붙은 함수는 만들 수 없다.
- 화살표 함수는 익명 함수를 만들어 다른 곳에 전달하려 할 때 가장 유용하다
- 화살표 표기법 예제
- 화살표 표기법 this 예제
- 화살표 표기법 참고 사이트
7. call, apply, bind
7-1. call
- this를 특정 값으로 지정할 수 있다
- call은 배열 대신 값들을 하나하나 전달하여 함수를 호출한다.
func.call(thisArg[, arg1[, arg2[, ...]]]);
// thisArg: 호출될 함수에게 지정될 this의 값(func 함수에서 this는 앞으로 이 값으로 해줘)
7-2. apply
- apply는 배열 요소를 함수 매개변수로 사용해야 할 때 유용
func.apply(thisArg, [argsArray]);
// thisArg: 호출될 함수에게 지정될 this의 값
7-3. bind
- 함수가 가리키는 this만 바꾸고 호출은 하지 않음
- bind 예제
- call, apply, bind 예제
전체 예제는 ch6.함수 참고.