함수 선언 - 보편적으로 사용
- function 키워드를 통해서 함수를 선언하는 방식.
- 호이스팅 가능 : 함수를 선언하기 전에 함수를 호출해도 코드가 동작된다.
- 함수 스코프를 가진다.
function 함수이름(파라미터) {
동작;
return 리턴값;
};
함수 표현식(function experession) : 함수 선언을 값처럼 사용하는 방식
- 함수 선언을 변수에 할당하거나 다른 함수의 아규먼트로 활용하는 것.
* 아규먼트(Argument) : 함수 혹은 메서드를 호출할 때, 전달 혹은 입력되는 실제 값(Value). 전달인자.
* 파라미터(Parameter) : 함수 혹은 메서드 정의에서 나열되는 변수(Variable)명. 매개변수. - 호이스팅 불가능 : 반드시 변수가 선언된 이후에 함수를 호출해야 정상적으로 동작한다.
- 변수에 할당하는 경우에는 할당된 변수의 특성에 따라 스코프가 결정된다.
- var 키워드에 할당하면 함수 스코프, let이나 const 키워드 변수에 할당하면 블록 스코프.
- let이나 const 키워드 변수로 활용된 것은 블록스코프를 가지게 되어, 코드 블록 밖에서 사용할 수 없다. - 함수 표현식을 작성할 때, 함수에 이름을 지정할 수 있다. 이를 '기명 함수 표현식'이라 한다.
- 기명 함수 표현식을 사용하는 이유는, 함수 내에서 함수를 가리켜야 할 때 이름을 사용해야 안전하기 때문.
예시 1)
const printTooktak = function(파라미터) {
동작;
return 리턴값;
};
printTooktak();
예시 2)
const myBtn = document.querySelector('#myBtn');
myBtn.addEventListener('click', function () {
console.log('나도 자바스크립트 할 수 있다!');
});
다양한 함수의 형태
// 변수에 할당해서 활용
const sayTT = function () {
console.log('Hi Tooktak');
};
// 객체의 메소드로 활용
const Tooktak = {
sayTT: function () {
console.log('Hi Tooktak');
}
}
// 콜백 함수로 활용
myBtn.addEventListener('click', function () {
console.log('button is clicked!');
});
// 고차 함수로 활용
function myFunction() {
return function () {
console.log('Hi Tooktak');
};
};
즉시 실행 함수 (IIFE)
- 함수선언 부분을 소괄호로 감싼 다음에 바로 뒤에 함수를 실행하는 소괄호를 붙여주는 방식.
- 함수가 선언된 순간 바로 실행이 된다.
- IIFE : Immediately Invoked Funciton Expression
(function () {
console.log('Tooktak');
})();
- 일반함수처럼 파라미터를 작성하고, 함수를 호출할 때 아규먼트를 전달할 수도 있다.
- 즉시 실행함수는 함수에 이름을 붙여도 외부에서 재사용 할 수 없다.
(function Tooktak() {
console.log('Tooktak');
})();
Tooktak(); // ReferenceError
- 일반적으로 익명함수를 사용한다.
- 내부에서 자기 자신을 호출하는 재귀적인 구조를 만들 땐, 이름이 필요할 수도 있다.
(function Tooktak(n) {
console.log(n);
if (n === 0) {
console.log('Tooktak');
} else {
Tooktak(n - 1);
}
})(7);
- 초기화 기능에 많이 활용된다.
(function init() {
// 프로그램이 실행 될 때 기본적으로 동작할 코드
})();
- 재사용이 필요 없거나 일회성 동작을 할 때도 활용되며,
- 아래와 같은 방식으로 리턴값을 바로 변수에 할당하고 싶을 때 활용할 수 있다.
const do = '나도';
const die = '할 수 있다!';
const myGoal = (function () {
const doordie = `${do} ${die}`;
return `늘 내가 나한테 하는 말. ${doordie}`;
})();
728x90
'코딩도 합니다 > JS' 카테고리의 다른 글
[자바스크립트 js] Arguments 객체 / Rest Parameter (0) | 2021.05.23 |
---|---|
[자바스크립트 js] 파라미터 Parameter와 아규먼트 Argument 차이 / 파라미터의 기본값 (0) | 2021.05.23 |
[자바스크립트 js] 변수와 스코프 / 함수 스코프 / 블록 스코프 (0) | 2021.05.20 |
[자바스크립트 js] null 병합 연산자 (Nullish coalescing operator) (0) | 2021.05.20 |
[자바스크립트 js] AND와 OR의 연산 방식 (0) | 2021.05.18 |