<함수고급>
1. 콜백함수
자바스크립트는 함수도 하나의 자료형이므로 매개변수로 전달할 수 있는데, 이렇게 매개변수로 전달하는 함수를 콜백(callback)함수
콜백(Callback) 함수는 간단히 말하면 매개변수로 함수 객체를 전달해서 호출 함수 내에서 매개변수 함수를 실행하는 것을 말한다
1-1. 콜백함수를 활용하는 함수 : for Each()
forEach()메소드는 배열이 갖고있는 함수(메소드)로써 단순하게 배열 내부의 요소를 사용해서 콜백함수를 호출
function(value, index, array){}
<script>
const numbers = [273, 52, 103, 32, 57]
numbers.forEach(function (value, index, array) { //매개변수로 value, index, array를 갖는 콜백 함수를 사용합니다.
console.log(`${index}번째 요소 : ${value}`)
})
</script>
<!-- [실행 결과]
0번째 요소: 273
1번째 요소: 52
2번째 요소: 103
3번째 요소: 32
4번째 요소: 57 -->
1-2. map()
콜백함수에서 리턴한 값들을 기반으로 새로운 배열을 만드는 메소드
<script>
//배열을 선언합니다.
let numbers = [273, 52, 103, 32, 57]
//배열의 모든 값을 제곱합니다.
numbers = numbers.map(function (value, index, array) { //매개변수로 value, index, array를 갖는 콜백 함수를 사용합니다.
return value * value
})
//출력합니다.
numbers.forEach(console.log) //매개변수로 console.log 메소드 자체를 넘겼습니다.
</script>
<!-- [실행 결과]
74529 0 Array(5)
2704 1 Array(5)
10609 2 Array(5)
1024 3 Array(5)
3249 4 Array(5) -->
numbers=~~ return value*value 실행하면서 numbers 배열은 [제곱 제곱 제곱 제곱 제곱] 으로 바꼈음
forEach 써서 numbers에 있는 value, index, array 가 출력됨.!!!!!!!!
value 만 써도 다른쓴거랑 똑같이나옴!
1-3 filter()
filter 메소드는 콜백함수에서 리턴하는 값이 true 인 것들만 모아서 새로운 배열을 만드는 함수
1-4 화살표함수 =>
function 키워드 대신 화살표를 사용하며, 다음과 같은 형태로 생성하는 간단한 함수
function(매개변수){리턴값} ----> 메소드(매개변수)=>리턴값
1-5 메소드 체이닝
배열의 메소드를 연속적으로 사용 ! . 찍으면 됨
1-6 타이머함수
setTimeout(함수,시간)
setInterval(함수,시간)
1-7
타이머를 종료하고 싶을 때
clearTimeout(타이머_ID)
clearInterval(타이머_ID)
2. 즉시 실행함수
변수의 이름 충돌을 막기 위해 코드를 안전하게 사용
블록과 함수 블록을 사용해 이름 충돌 문제 해결하기 (함수의 scope)
var 은 함수 블록일때만 해결됨. 블록에 var 있으면 해결되지않음.
var 함수: 함수범위에서만 적용
블럭: 블럭 범위 밖까지 적용
let 블록안에서 다시 정의안하면 밖에있는 값을 가져옴
큰 범위에서 정의해야함 (전역함수)
지역에서 정의 (지역함수) 지역내에 없으면 전역에 찾으러감.
다른 지역에 있는것은 불러올 수 없음.
※ let output=0
function (let i=0, i<10, i++){output+=i}
output을 함수 안에 넣을 경우 밖에서 불러올 수 없음
불러오려면 바깥에 있어야함!!
3. 엄격모드 'use strict'
문법 오류를 더 발생기키는 엄격모드로 실수를 줄이기위해 사용
4. 익명함수와 선언적 함수
-익명 함수 : 해당 줄을 읽을때 생성
아래예시에서 'a'는 함수명이 아닌 변수이름임!
let 익명함수 : a라는 변수를 선언한다 .
익명함수=function 어쩌구저쩌구 : a라는 변수는 ~~~ 익명함수이다.
-선언적 함수 : 선언적함수는 순차적인 코드 실행이 일어나기 전에 생성됨.
같은 블록 내에서는 어디서 실행해도 상관없음
+ let 익명함수, 선언적함수를 같은 이름 (a)을 쓰면 ( 물론 같은 이름을 쓰는건 어디서든 권장되지않음)
let 익명함수: 선언행위
선언적함수: 선언행위 이므로 같은 이름으로 이중선언이 된다.
또한, let 익명함수의 a는 변수, 선언적함수의 a는 함수이므로 덮어쓰기가 되지않음
(함수끼리, 변수끼리는 덮어쓰기됨!)
▶ 선언적 함수와 익명 함수의 특징
- 선언함수 : Hoisting의 대상.
- 익명함수(Anontmous Function) : Hoisting의 대상이 아님.
'Javascript' 카테고리의 다른 글
6. javascript 6 (예외처리, Class) (0) | 2024.03.11 |
---|---|
5. javascript 5 (0) | 2024.03.08 |
4. javascript4 (0) | 2024.03.07 |
2. javascript2 (0) | 2024.03.05 |
1. javascript (0) | 2024.03.04 |