function Cat(name, age){
this.name = name
this.age = age
}
const blackCat = Cat('kiki', 3)
console.log(blackCat.name)
// new를 사용하지 않고 실행시 this가 윈도우를 가리키게 됨
// return 값이 없기 때문에 undefined가 반환되고 undefined.name이 되어 에러 발생
console.log(window.name) // kiki
// 의도치 않게 전역 윈도우 객체를 오염시킴
// const blackCat = new Cat('kiki', 3)
const film = {
title : 'her',
genre : 'drama',
actors : {
JoaquinPhoenix : {
actorName : 'Joaquin Phoenix',
introduction : function() {
console.log(`films : ${this.title},
main character : ${this.actorName}`)
}
}
}
}
films.actors.JoaquinPhoenix.introduction()
//movie : undefined, main character : Joaquin Phoenix
//introduction 함수 내에서 불러온 this가 JoaquinPhoenix객체를
//나타내기 때문에 이 객체 내부엔 title이 없어 undefined가 출력
function HorrorMovie(actors){
this.actors = actors
this.role = function(){
setTimeout(function() {
this.actors.forEach(function(actor){
// 여기에 쓰인 this는 HorrorMovie의 this가 아닌
// setTimeout의 this를 가르키기 때문에 actors가 존재하지 않음
actor.role()
})
})
}
}
var DawnOfTheDead = new HorrorMovie([
{
name : 'Sarah Polley',
role : function(){
console.log('Lead : Sarah Polley')
}
}
])
DawnOfTheDead.role()
const numbers = [0, 1, 2, 3]
for(var i = 0; i < numbers.length; i++){
setTimeout(function(){
//여기서 사용된 i는 function 외부에서 선언된 변수
//따라서 setTimeout이 실행된 시점에 i는 이미 for 루프가 다 끝나 4인 상태
//numbers[4]는 존재하지 않기 때문에 undefined 반환
console.log(`numbers[${i}] : ${numbers[i]}`)
}, 1000)
}
//[4] : undefined
//[4] : undefined
//[4] : undefined
//[4] : undefined
function Counter(){
let count = 0
function increase(){
count++
}
function printCount(){
console.log(`count : ${count}`)
}
return {
increase,
printCount
}
}
const counter = Counter()
//Counter에서 return하는 increase, printCount가 들어간 객체가 들어있음
counter.increase()
counter.increase()
counter.increase()
counter.increase()
counter.printCount() //count : 4
console.log(counter.count) //undefined
// 외부에서는 Counter 내의 count에 접근 불가
// counter에는 두가지 함수만 return될 뿐 count는 없기 때문에
// 실제로 counter에 count가 들어있지 않음
프로젝트가 끝나고 우선적으로 밀린 강의를 들었다! 클로저와 스코프에 대한 내용이 주를 이뤘는데 1주차 강의 때 배웠던 부분이지만 가볍게 넘어갔던 부분이었다. 완벽히 이해가 가지 않아 아티클로 따로 정리하려 했는데 매 주가 고비였기 때문에 어영부영 넘어갔었던 기억이 난다. 이번 강의를 통해서 공부하고 싶었던 부분을 정확하게 공부할 수 있어서 좋았다. 처음엔 코드를 짤 때 전역 변수를 설정하고 함수 내부에서 이 변수를 사용하는 것을 당연하게 생각했기 때문에 스코프와 클로저 개념이 따로 존재한다는 것이 새로웠다. 공부하면서 내가 알던 개념적 부분 외에도 이 기능을 프라이빗한 정보를 다루는데도 사용할 수 있다는 점이 흥미로웠다. 클로저에 대한 내용은 잘 이해됐지만 강사님께서 클로저에 대한 이해도에 따라 코드의 퀄리티가 달라진다고 말씀하셔서 더 깊게 공부해놓으면 좋을 것 같다고 판단돼 아티클도 작성할 생각이다!
내일이면 6주차가 시작되는데 이번주는 강의가 밀리지 않아서 더 깊게 공부하고 싶은 부분들이나 프로젝트를 수정할 수 있는 시간을 가질 수 있었으면 좋겠다!