자바스크립 함수 기초
익명 함수와 선언적 함수
익명함수
const f = function (매개변수, 매개변수) {
return 리턴값
}
선언적 함수
function f (매개변수, 매개변수) {
return 리턴값
}
const f 가 변수 이름이 있으니까 익명이 아니지 않나! 라는 무식한 생각을 했지만
변수 이름은 있고 함수 이름은 없으니 익명 함수 맞음 ^^ ( 이렇게 기억하고있자 ㅠ )
초기에는 선언적 함수를 더 많이 사용했는데
자바스크립트가 프로그래밍 본질을 발전시켜나가면서 익명 함수를 더 많이 쓰게 되었다고 한다.
왜냐하면 ...
함수() // → 선언적함수입니다.
함수 = function(){ // (2) 얘가 나중에 실행됨
console.log('익명함수입니다.')
}
function 함수(){ // (1) 얘가 먼저 만들어지고
console.log('선언적함수입니다.')
}
함수() // → 익명함수입니다.
선언적함수는 무조건 전체코드를 실행하기 전에,
익명함수는 코드를 하나하나 실행하면서 만들어짐
자바스크립트에서 선언적함수때문에 흐름이 깨져서 잘 안씀
진짜 개헷갈리겠네
가독성
개발의 기본적인 관점
성능(더적은cpu, 메모리자원) vs 가독성(쉽게 읽고, 안전하게)
여기서 가독성이 win
가독성이 중요하게 된 이유
(1) 비용절감 : 개발자 몸값 오르고 컴퓨터는 저렴해짐 .. 그래서 저렴한 개발자 데려와서 바로 쓸 수 있게 ㅠ
(2) 프로그램이 너무 복잡해져서
(3) 지원 도구의 발전 및 활용
그래서 현대적인 개발에서는 "단위테스트(unit test)"가 중요해짐
* 단위테스트 : 코드를 작성하고 빠르게 문제가 있는지 없는지 테스트해주는 과정을 자동화한 것
클린코드, 클린아키텍처, 이펙티브자바 등 .. 이런 명서들이 개발의 관점을 크게 바꿨다고함
(깨끗하고 더 효율적이고 안정적인지 알려주는 가독성에 관한 책들)
아무튼 가독성이 졸라 중요하다 ^^
언젠가 읽어보자 ... 언젠가
기본 매개변수
가독성이랑 관련이 있나? 암튼 매개변수가 필요한 함수를 만들었는데
다른 누군가가 그걸 알 턱이 없으니 기본 매개변수를 세팅해둔다
내 작업을 맡을 다음 사람을 위한 배려같은 건가? 좀 스윗하긴 하네
콜백함수
콜백함수 : 매개변수로 전달하는 함수
const 테스트 = function(a){
a()
}
const 함수 = function(){
console.log("안녕");
}
테스트(함수) 를 실행하면 "안녕" 이 출력됨
매개변수를 실행하는 함수와 "안녕"을 출력하는 함수
"안녕"을 출력하는 함수를 매개변수를 실행하는 함수의 매개변수로 넣었기 때문에
매개변수를 실행하는 함수는 매개변수를 실행하여
안녕이 출력된 것
아웅 말장난같애
참고로 여기서 ...
테스트(123) 을 실행하면 123은 함수가 아니니까 에러남
그니까 무조건 함수만 매개변수로 넣어야함.
여기서 매개변수인 a를 콜백함수라고함
자바스크립트에서 내부적으로 사용하는 콜백함수
배열의 콜백함수를 사용하는 메서드 | ||
forEach() | filter() | map() |
forEach() : 콜백함수로 매개변수를 value, index, array를 가지는 녀석을 받음
array는 현재 반복을 돌고있는 배열을 의미, 근데 잘 안써서 주로 value, index만 씀
const 배열 = [1, 2, 3, 4, 5]
배열.forEach(function (value, index){
console.log(`${index}번째의 값은 ${value}`)
});
→ 0번째의 값은 1, 1번재의 값은 2, 2번째의 값은 3 ... 이렇게 value와 index가 출력
filter() : 얘도 콜백함수로 매개변수를 value, index, array를 가지는 녀석을 받음.
얘는 콜백함수로 true, false를 리턴해서 함수가 올 것을 예상함. 즉, 필터링한 배열을 리턴함
let 배열 = [1, 2, 3, 4, 5]
배열 = 배열.filter(function(value, index){
return value % 2 === 0
})
console.log(배열)
→ [2, 4] 즉, 2로 나눈 나머지가 0인 애들만 필터링됨
또한 얘는 비파괴적 함수라서 원래 배열을 변경하는 게 아님!
그래서 const가 안된다 (힙에 저장된 새로운 배열의 주소를 재할당해야하니까)
map() : 기존의 배열을 기반으로 새로운 배열로 리턴함
let 배열 = ["킹", "왕", "짱"]
배열.map(function (value, index){
return "테이" + value
});
console.log(배열)
→ ["테이킹", "테이왕", "테이짱"]
forEach, filter, map 정도는 필수로 알아두자
'🧠 저장 > Javascript' 카테고리의 다른 글
문서 객체 조작 (0) | 2022.11.14 |
---|---|
배열과 객체 관련 기초 (0) | 2022.10.27 |
Javascript - 스택과 힙, 파괴적 처리와 비파괴적 처리 (0) | 2022.10.13 |
Javascript - 모듈 사용하기 (export, import) (0) | 2022.10.06 |
Javascript - 프로토타입, 클래스, 상속 (0) | 2022.09.14 |