function Cat(name, age) {
this.name = name
this.age = age
}
const tab = Cat('nana', 7)
console.log(tab.name) // Error ... Cat 의 return 이 없기 때문에 여기서의 this 는 window 를 가르킴
// 위 코드는 아래와 같이 수정하면 원하는 값을 출력할 수 있음
const tab = new Cat('nana', 7)
// 함수를 실행할 때 new 키워드를 통해 실행하면 this 가 new 를 통해 새로 생성된 객체를 가르킴
console.log(tab.name) // 'nana'
Temporary Dead Zone
이라는 개념으로 인해 할당되기 전에 호출하면 에러가 출력됨.function outterFunction() {
const name = 'roto'
return function () {
alert(name)
}
}
const printName = outterFunction()
printname() // 'roto'
위 코드에서 outterFunction 실행 후 name 변수는 소멸해야 하지만, 클로저에 의해 alert(name) 이 잘 작동합니다.
function double(arr) {
let result = []
for (let i = 0; i < arr.length; i++) {
result.push(arr[i] * 2)
}
return result
}
function double(arr) {
return arr.map(number => number * 2)
}
or
function double(arr) {
return arr.filter(param => typeof param === 'number')
.map(number => number * 2)
}
아직 선언형 프로그래밍 보다 명령형 프로그래밍이 더 익숙하고, 선언형은 사용하기 어렵다.
선언형 프로그래밍을 사용해야 가독성과 유지보수적인 측면에서 훨씬 좋다고 하니 자주 사용해보도록 노력해봐야겠다.
클로저의 개념은 잘 모르고있었지만, 코딩테스트 문제를 풀거나 하면서 나도모르게 사용해본 적이 종종 있는 것 같았다. 앞으로 개념을 정확히 숙지하며 사용하도록 할 것이다.
함수형 프로그래밍보다는 마음이 훨씬 놓이는 강의였다....