[ 자바스크립트+jQuery 완전정복 스터디 1 ]
(http://book.naver.com/bookdb/book_detail.nhn?bid=9650891)
PART2 - CH03 함수 중급
lesson01 변수와 함수의 관계
01_변수에 함수를 저장한 경우
1 | // 함수 hello 선언 |
02_매개변수 값으로 함수 사용하기
1 | // 함수 hello1 선언 |
< 매개변수로 함수를 전달하여 날짜를 출력하는 예제 >
03_리턴 값으로 함수사용하기
함수는 어떤 값(데이터)든 리턴할 수 있습니다. 이는 리턴 값으로 함수를 리턴할 수 있다는 의미이기도 합니다.
lesson02 함수 리터럴과 익명 함수
01_리터럴이란?
데이터를 만드는 방법은 크게 리터럴 방식과 객체 방식 두 가지가 있습니다.
(리터럴은 코드 상에서 데이터를 표현하는 방식을 말합니다.)
리터럴부터 클로저까지 - http://programmingsummaries.tistory.com/92
< 데이터 선언방식에 따른 차이 >
02_함수 리터럴이란?
1 | // 리터럴 방식으로 함수 선언(함수 표현식) |
< 함수 선언 방식에 따른 호이스팅 >
03_익명함수란?
익명함수는 이름을 지정하지 않은 함수를 의미합니다.
< 함수 선언식과 표현식에 따른 호이스팅 >
< 익명 함수의 사용 예 >
lesson03 함수 정의 방법 4가지
1 | // function 키워드의 사용(함수 선언식) |
lesson04 함수 종류
01_함수 분류
사용자 정의 함수 - 사용자가 필요한 기능을 직접 만든 함수를 말함
자바스크립트 코어 함수 - 자바스크립트가 기본적으로 제공하는 함수
02_사용 방법에 다른 함수 종류
함수 종류 | 내용 |
---|---|
일반 함수 | 가장 일반적으로 사용한 함수를 말합니다. |
중첩 함수 | 함수 안에 함수가 있는 경우 중첩되었다라고하며 이때 함수 안에 있는 함수를 중첩 함수라고 합니다. |
콜백 함수 | 함수 실행결과 값을 리턴이 아닌 매개변수로 넘어온 함수를 호출해서 넘겨주는 방식을 콜백이라하며 이때 매개변수로 넘어온 함수를 콜백 함수라고 합니다. |
클로저 함수 | 일반적인 함수의 경우 함수 호출에 의해 함수 내부의 실행 구문을 모두 실행하게 되면 함수 내부에서 만든 지역변수가 자동으로 사라지지만 어떤 경우에는 사라지지 않고 남는 경우가 있습니다. 이 현상을 클로저라고 하며 이 현상을 일으키는 함수를 클로저 함수라고 합니다. |
맴버함수(메서드) | 맴버함수는 클래스 내부에 만들어지며 주로 메서드라고 불립니다. |
lesson05 중첩 함수
중첩함수는 함수 내부에 만들어지는 함수를 중첩 함수라고 부릅니다.
중첩함수는 아래와 같은 경우 사용 합니다.
02_중첩함수는 이럴 때 사용해요
내부 전용 함수
함수 내부의 지역변수처럼 함수 내부에서만 사용할 수 있는 것으로 일반적으로는 이름 없는 이벤트 리스너에 많이 사용됩니다.
중복 코드 또는 코드의 그룹화
함부 내부의 커다란 기능이나 중복 코드를 내부 함수로 만들어 재사용할 때도 중첩함수를 사용합니다.
03_중첩함수와 중첩 함수를 포함한 함수와의 관계
중첩함수의 가장 큰 특징은 중첩 함수에서는 중첩함수를 포함하고 있는 함수의 지역변수에 접근해서 사용할 수 있다는 것입니다.
< 함수 유효범위에 따른 사용 예 >
위처럼 내부에서는 외부를 참조할 수 있으나 외부에서 내부는 참조할 수 없습니다.
lesson06 콜백 함수
01_콜백 함수란?
콜백함수는 주로 함수 내부의 처리결과 값을 함수 외부로 내보낼 때 사용하며 일종의 return 문과 비슷한 기능을 한다고 볼 수 있습니다.
1 | // 콜백 함수의 예 |
< 콜백 함수의 사용 예 >
03_return VS 콜백 함수
< return을 사용하는 경우 >1
2
3
4
5
6function sum(num1, num2) {
return num1 + num2;
}
var result = sum(10, 20);
alert('두 수의 합은' + result + '입니다.');
< 콜백 함수를 사용하는 경우 >1
2
3
4
5
6
7
8
9
10function sum(num1, num2, callback) {
var result = num1 + num2;
callback(result);
}
function sumAlert(num) {
alert(num);
}
sum(10, 20, sumAlert);
04_동기 VS 비동기
동기란?
일반적으로 함수가 호출된 후 끝날 때까지 다음 구문을 실행하지 않고 대기하고 있는 경우를 우리는 동기라고 합니다.
(즉 실행한 함수가 끝나지 않았다면 다음으로 진행하지 않고 기다리는 형태를 말합니다.)
동기란?
동기와 반대 되는 개념으로 일반적으로 함수가 호출된 후 끝날 때 까지 기다리지 않고 바로 다음 구문을 실행하는 경우를 비동기라고 합니다.
< jQuery ajax 사용 예 >
< jQuery animate callback >
< 콜백 지옥의 예 >
lesson07 클로저 함수
01_클로저란?
클로저는 함수 내부에 만든 지역변수가 사라지지 않고 계속해서 값을 유지하고 있는 상태를 말합니다.
(함수의 생명주기가 종료되었지만 내부함수가 참조하고 있어 그 함수에 접근할 수 있는 함수라고 설명되기도 합니다.)
< 간단한 클로저의 예1 >
< 간단한 클로저의 예2 >
03_클로저를 사용하면 좋은 점
클로저를 사용하면 연관 있는 변수와 기능(중첩 함수)을 하나의 함수로 묶어 독립적으로 실행시킬 수 있다는 것으로 함수 내부에 데이터가 만들어지기 때문에 외부에서 수정할 수 없는 보호된 데이터를 만들 수 있게 됩니다.
(객체지향 프로그래밍에서는 이를 private 데이터라고 부른다고 함)
자바스크립트 클로저 쉽게 이해하기 - http://chanlee.github.io/2013/12/10/understand-javascript-closure/
번외 - 어휘적 유효범위(lexical scope)
자바스크립트는 Lexical scope 특성을 지닙니다.
Lexical scope란 Scope가 함수 실행시점이 아닌 함수 정의 시점에 정해진다는 의미입니다.
1 | // 전역변수 name을 선언하고 값을 'nero'로 할당 |
< 확인 1 >
< 확인 2 >
출처 - https://jae-kwang.github.io/blog/2017/11/13/js-closure/