
오늘 여자친구와 만난지 1000일이 되는 날이다. 나는 전혀 몰랐는데 여자친구가 알려줘서 알게됐다. 여자친구는 1000일이라고 편지도 적고 꽃이랑 케익도 사왔는데 나는 아무것도 챙긴게 없어서 미안하진 않고 고마웠다.😜
같이 밥을 먹으면서 1000일이면 몇초인지 궁금해서 계산해보니까 8600만초 정도 되길래 1억초를 계산해서 기념일로 하자고 했다. 그랬더니 여자친구는 공돌이 같다며 질색했다..😥
살면서 한 번도 못 타본 빠스뜨 끌라스가 JS에 있다고 한다. 바로 함수가 일급 객체(first-class citizen)라고 하는데 매우 특별한 취급을 받는다. 함수를 데이터 다루 듯이 '변수'에 할당될 수도 있고 다른 함수의 '인자'로 사용될 수도 있고 다른 함수의 '결과'로서 리턴될 수도 있다.
이렇게 특별대우 받는 함수를 '고차 함수'라고 하는데 이러한 특별대우 때문에 그렇게 곯머리 앓게 하던 '클로저', '콜백', '커리' 등이 나왔나보다..
함수를 인자로 받거나 (콜백)
함수를 리턴하는 (커리)
함수를 인자로 받고 함수를 리턴하는 함수 (^^..)
의미 그대로 필터다
내가 원하는 값만
분류하는 함수
조건문이 주로 쓰인다(이건 확실하지 않다. 단지 나의 경험이다)
let maratang = ['당면', '만두', '고기', '고수', '버섯']
let isGreatForMaratang = function(ingred) {
return ingred !== '고수'
}
let filterIngredients = maratang.filter(isGreatForMaratang);
console.log(filterIngredients) // ['당면', '만두', '고기', '버섯']
마라탕을 먹으러 갔을 때 우리는 재료를 원하는 데로 담아서 먹을 수 있는 것 처럼 재료를 '분류'하고 싶을 때 filter 매서드를 사용 할 수 있다. (오늘 filter와 map에 대해서 질문했는데 이렇게 알려주셔서 이해가 너무 잘갔다. 하지만 나는 고수도 좋아한다.)
let maratang = ['당면', '만두', '고기', '고수', '버섯']
function isGreatForMaratang(gosu) {
return maratang.filter(function(el) {
return el.toLowerCase().indexOf(query.toLowerCase()) > -1;
})
}
MDN에서 filter를 찾아보다가 이런 것도 나와서 적어본다.
query가 뭘까?
내가 원하는 행동이 전부 적용된다
콜백 함수?
let jajangmyeon = ['면', '양파', '고기', '짜장', '버섯']
let howManyDoYouWant = jajangmyeon.map(x => x + ' ' + 2 + '개');
console.log(howManyDoYouWant)
내가 버섯을 먹기 싫어도 먹어야 한다. 곱배기를 시켰으니까. (물론 버섯도 좋아한다)
=> 이건 화살표 함수라고 한다.
앞에 썼던 필터(마라탕)을 화살표 함수로 써보면
let maratang = ['당면', '만두', '고기', '고수', '버섯']
let filterIngredients = maratang.filter((ingred) => {
return ingred !== '고수';
});
console.log(filterIngredients) // ['당면', '만두', '고기', '버섯']
// 1. 파라미터가 하나만 있을 때는 주변 괄호를 생략할 수 있다.
let filterIngredients = maratang.filter(ingred => {
return ingred !== '고수';
});
// 2. 화살표 함수의 유일한 문장이 'return'일 때 'return'과 중괄호({})를 생략할 수 있다.
let filterIngredients = maratang.filter(ingred => ingred !== '고수')
이렇게 조금 더 짧고 효율적으로 코드를 작성 할 수 있다.
그래도 아직 화살표 함수가 어색하고 어떻게 써야할지 정확하게 모르겠다. 더 공부를 해야하는 부분이다.
배열형태의 객체(유사배열)
함수 내에서 이용 가능한 지역변수
함수 내에서 모든 인수 참조 가능
사용자가 전달한 '인자'에 접근할 수 있는 변수
function func() {
return arguments
}
func('zero', 'one', 'two') // Arguments(3) ['zero', 'one', 'two']
// 0: 'zero'
// 1: 'one'
// 2: 'two'
항상 배열
function func(a, b, ...args) {
console.log(a) // 1
console.log(b) // 2
console.log(args) // [3, 4 ,5]
}
func(1, 2, 3, 4, 5)
유사배열 만들기
얕은 복사
Array.from('Jay');
// ['J','a','y']
동일한 키가 존재할 경우 대상(target) 객체의 '속성'은 출처(source) 객체의 속성으로 덮어쓰여진다
let tar = {a: 1, b: 2};
let sou = {b: 4, c: 5};
Object.assign(tar, sou);
console.log(tar) // {a: 1, b: 4, c: 5}
console.log(sou) // {b: 4, c: 5}
두 개의 객체를 하나로 합치면서,
두 객체 중 같은 속성이 존재할 때,
출처(sourec) 객체의 속성을 가져오고 싶을 때 사용