[함수] 익명함수, 즉시실행함수, 함수호출방법 추가
This commit is contained in:
93
content/함수/README.md
Normal file
93
content/함수/README.md
Normal file
@@ -0,0 +1,93 @@
|
||||
# 함수
|
||||
|
||||
Javascript에서 함수는 유연성이 높다.
|
||||
|
||||
## 목차
|
||||
- [익명 함수](#익명-함수)
|
||||
- [즉시실행함수](#즉시실행함수)
|
||||
- [함수호출방법](#함수-호출-방법)
|
||||
|
||||
### 익명 함수
|
||||
|
||||
```javascript
|
||||
function() {
|
||||
return '익명 함수입니다';
|
||||
}
|
||||
```
|
||||
|
||||
이름이 없는 함수를 익명함수라 한다.
|
||||
이름이 없기에 기존의 함수 호출 방법으로는 익명함수를 호출 할 수 없다.
|
||||
```javascript
|
||||
getId();
|
||||
```
|
||||
와 같이 이름으로 호출 할 수 없다.
|
||||
|
||||
---
|
||||
|
||||
**Javascript에서 함수는 `값`으로 인식된다.**
|
||||
|
||||
즉, `a = 10` 처럼 a라는 변수에 10이라는 값을 담듯이
|
||||
변수 안에 함수를 담을 수 있다는 것이다.
|
||||
|
||||
이를 통해 익명함수를 호출할 수 있다.
|
||||
|
||||
```javascript
|
||||
const testFunc = function() {
|
||||
return '익명함수를 호출합니다';
|
||||
}
|
||||
```
|
||||
|
||||
testFunc라는 변수안에 `익명함수를 호출합니다` 라는 문자열을 반환하는 함수가 담긴다.
|
||||
|
||||
|
||||
```javascript
|
||||
testFunc();
|
||||
```
|
||||
이와 같이 익명함수를 호출 할 수 있다.
|
||||
|
||||
---
|
||||
### 즉시실행함수
|
||||
또 한가지 방법으로 **즉시실행함수** 가 있다.
|
||||
|
||||
```javascript
|
||||
(function(a) {
|
||||
return a * 2;
|
||||
})(2)
|
||||
// 4
|
||||
```
|
||||
|
||||
코드의 형태를 보면 함수의 선언문을 괄호로 감싼 뒤 바로 호출해주는 모습이다.
|
||||
함수를 선언함과 동시에 실행한다고 보면 된다.
|
||||
|
||||
익명함수만 즉시실행함수로 정의가 가능한 것은 아니다.
|
||||
즉시실행함수로 비익명(기명)함수도 실행가능하다.
|
||||
```javascript
|
||||
(function multiply(a) {
|
||||
return a * 2;
|
||||
})(2)
|
||||
```
|
||||
---
|
||||
### 함수 호출 방법
|
||||
|
||||
1. `함수의이름()`
|
||||
|
||||
일반적인 방법이다.
|
||||
|
||||
2. `call` 함수
|
||||
3. `apply` 함수
|
||||
|
||||
`call`함수와 `apply`함수는 사용법은 거의 같으나 함수 호출에 필요한 인자를 넘겨주는 방식에 차이가 있다.
|
||||
|
||||
```javascript
|
||||
function concat(a, b) {
|
||||
return `${a} ${b}`;
|
||||
}
|
||||
|
||||
concat.call(null, 'Hello', 'world!');
|
||||
concat.apply(null, ['Hello', 'world!'])
|
||||
```
|
||||
|
||||
5번, 6번라인의 코드 모두 `Hello world!` 라는 같은 결과를 반환한다.
|
||||
다만, `call`은 함수 호출에 필요한 인자를 쭉- 나열하는 방식이지만 `apply`는 인자를 배열 안의 요소로 담아 넘겨준다.
|
||||
|
||||
필요와 용도에 따라 사용하면 될 것 같다.
|
||||
Reference in New Issue
Block a user