함수 선언문
// 함수 선언문
function sum(num) {
console.log(num + num) // 4
return num + num
}
sum(2)
함수 표현식
- 자바스크립트 함수의 특성(일급객체)을 이용해 변수에 할당할 수 있다.
- 변수에 할당할 수 있기 때문에 함수명을 생략할 수 있는데 이것을 익명 함수라고 한다.(보통 함수 표현식에서는 함수명을 생략함)
// 함수 표현식
var sum = function (num) {
console.log(num + num) // 4
return num + num
}
sum(2)
(1) 변수에 함수를 할당하고 변수명으로 호출하는 것이 아닌 함수명을 사용해 호출하게 되면 에러가 발생한다.
(함수 표현식에서 사용한 함수명은 외부 코드에서 접근 불가능하기 때문)
(2) 함수 표현식과 함수 선언문에서 사용한 함수명은 함수 내부에서 재귀적 호출, 디버거가 해당 함수를 구분할 수 있는 식별자 역할을 한다
// 1번 예시
var sum = function add (num) {
console.log(num + num) // 4
return num + num
}
add(2) // add is not defined (변수명으로 호출하지 않고 함수명으로 호출하면 에러가 발생한다)
// 2번 예시
var sum = function add (num) {
console.log(num + num)
if(num == 2) {
console.log('재귀 호출')
add(3) // 함수 내부에서는 함수명으로 재귀적 호출이 가능하다
}
return num + num
}
sum(2)
즉시 실행 함수
- 함수의 정의와 동시에 실행되는 함수를 즉시 실행 함수 라고 한다.
- 최초 한번만 호출 가능하고 다시 호출이 불가능하다.
(function test(){
console.log("hi") // hi
}())
test() // test is not defined
내부 함수
- 함수 내부에 정의된 함수를 내부함수(Inner function)라 한다.
- 내부함수는 자신을 포함하고 있는 부모함수 변수에 접근 가능하다
- 부모함수는 자식함수의 변수에 접근할 수 없다.
- 내부함수는 부모함수가 아닌 외부에서 접근이 불가능하다.
function parent(str) {
var position = '원딜';
function child() {
var line = "바텀";
console.log(`${str}은 ${position}이고 ${line} 라인 입니다`);
}
child();
console.log(`${str}의 라인은 ${line} 입니다.`); // line is not defined
// 부모함수는 자식함수(내부함수)의 변수에 접근할 수 없다
}
parent('이즈리얼')
child() // child is not defined
// 내부함수는 부모함수 외부에서 접근할 수 없다.
콜백함수
- 특정 이벤트가 발생했을 때 시스템에 의해 호출되는 함수를 말한다.
- 보통 비동기식 처리 모델에서 사용된다.
function callback(num) {
for(var i=0; i<=num; i++) {
if(i === num) {
test() // 콜백함수 호출
}
}
function test() { // 콜백함수
console.log("콜백함수 실행")
}
}
callback(5)
'Javascript' 카테고리의 다른 글
[Javascript] 프로토타입(Prototype) (0) | 2021.07.07 |
---|---|
[Javascript] 호이스팅 (0) | 2021.07.03 |
[Javascript] 객체와 변경불가성(Immutability) (0) | 2021.06.22 |
[Javascript] 객체 (0) | 2021.06.21 |
[Javascript] 데이터 타입 (0) | 2021.06.18 |