[LearningJS] 함수
함수
-
호출 & 참조
- 호출 : 함수 식별자 뒤에 괄호() 를 쓰면 함수 바디를 실행
- 참조 : 함수 식별자 뒤에 괄호를 쓰지 않으면 함수를 참조만 하고 실행하지 않는다.
- 함수는 변수, 객체 프로퍼티, 배열 요소에 할당할 수 있다.
-
매개변수(argument or parameter) : 함수를 호출하면서 정보를 전달할 때 사용
- formal argument
function avg(a, b) {}
에서 a, b를 정해진 매개변수라고 한다.
- actual argument
avg(5, 10)
에서 5, 10을 실제 매개변수라고 한다.- 실제 매개변수는 함수 바디 안에서만 존재하고 함수 밖에서 사라진다.
- 함수 안에서 매개변수에 값을 할당해도 함수 바깥에 있는 어떤 변수에도 아무런 영향이 없다. 하지만 함수 안에서 객체 자체를 변경하면, 그 객체는 함수 바깥에서도 바뀐점이 반영된다.
- 어떤 함수를 호출하든 정해진 매개변수 숫자와 관계없이 매개변수를 전달해도 된다.
- 정해진 매개변수에 값을 전달하지 않으면 암시적으로 undefined가 할당된다.
- 함수에서 남는 매개변수를 사용하려면 확산 연산자(…)를 마지막 매개변수 자리에 쓴다.
- formal argument
-
메서드(method) : 객체의 프로퍼티인 함수. 객체 인스턴스에서 호출할 의도로 만든 함수.
-
this 키워드 : 메서드를 호출하면 this는 호출한 메서드를 소유하는 객체가 된다.
- this가 포함된 객체를 다른 변수에 할당하면 함수가 어디에 속하는지 알수 없기 때문에 this는 undefined에 묶인다.
- 중첩된 함수에서 this를 활용하면 의도한 대로 this가 연결되지 않는다.
- 이를 해결하기 위해 첫 번째 함수에서 변수를 만들어 this를 할당한다.
const self = this;
- 중첩된 함수에서는 this가 할당된 변수를 this처럼 활용한다.
this.name
->self.name
- 이를 해결하기 위해 첫 번째 함수에서 변수를 만들어 this를 할당한다.
-
익명함수(anonymous function) : 함수에 식별자가 주어지지 않는다.
- 선언한 함수를 변수에 할당해서 표현식 형태로 사용한다.
const f = function() {};
- 함수 안에서 자신을 호출할 때를 ‘재귀(recursion)’ 라고 한다.
- 선언한 함수를 변수에 할당해서 표현식 형태로 사용한다.
-
화살표 표기법(arrow notation)
- 화살표 함수는 항상 익명함수로 만들어지며, 다른 곳에 전달할 때 유용하다.
- 변수 선언 = argument => return문
const f1 = () => 'hello';
const f2 = name => 'Hello, ${name}'
(‘’ 는 backtic)
- this가 정적으로 묶이기 때문에 화살표 함수 내부에서 this를 사용할 수 있다.(중첩 가능)
-
call, apply, bind
-
call : 모든 함수에 대해 메서드로 사용 가능.
-
함수를 호출하면서 call을 사용하고, this로 사용할 객체를 넘기면 해당 함수가 주어진 객체의 메서드인 것처럼 사용할 수 있다.
const bruce = {name: "Bruce"}; // 이 함수는 어떤 객체에도 연결되지 않았지만 this를 사용합니다. function greet() { return `Hello, I'm ${this.name}!`; } greet(); // "Hello, I'm undefined!" - this는 어디에도 묶이지 않았습니다. greet.call(bruce); // "Hello, I'm Bruce!" - this는 bruce 입니다.
-
call의 첫번째 매개변수는 this로 사용할 값이고, 매개변수가 더 있으면 호출하는 함수로 전달된다.
function update(birthYear, occupation) { this.birthYear = birthYear; this.occupation = occupation; } update.call(bruce, 1949, 'singer'); // bruce는 이제 {name: "Bruce", birthYear: 1949, occupation: "singer"} 입니다.
-
-
apply : call과 같은 기능을 하지만 call은 매개변수를 직접 받고, apply는 this를 제외한 매개변수를 배열[]로 받는다.
update.apply(bruce, [1949, 'actor']);
-> bruce는 this, 배열은 argument- apply의 매개변수로 확산 연산자(…) 사용 가능
-
bind : 함수의 this 값을 영구히 바꿀 수 있다.
- this 값을 고정시키기 때문에 함수의 this가 어디에 묶이는지 정확히 파악해야 한다.
-
댓글남기기