function Cat(name, age){
this.name = name;
this.age = age;
}
const tabby1 = Cat('nana', 7);
console.log(tabby1.name)
<aside> 💡 생성자함수와 일반 함수의 this 바인딩 차이
</aside>
tabby1 = undefined
가 할당되고, undefined의 name을 접근하기 때문에 오류가 발생하게 된다.(function(name){
console.log(`hello ${name}`)
}){'roto'}
즉시실행함수를 사용하는 이유
js에서 선언된 모든 변수나 함수는 전역 공간에 저장되고, 다른 파일에서 같은 변수명을 사용할 경우 오버라이딩 되는 경우가 발생한다.
변수공간을 제한
하기 위해 사용했다.const logger = (function () {
let privateCnt = 0;
function log(msg) {
console.log(msg);
privateCnt += 1;
}
function getLogCnt() {
return privateCnt;
}
return {
log: log,
getLogCnt: getLogCnt,
};
})();
// logger.privateCnt에 직접 접근할 수 없게 됨
var idiots = {
name: "name",
genre: "genre",
members: {
roto: {
memberName: "roto",
play: function () {
console.log(this.name, this.memberName);
},
},
},
};
idiots.members.roto.play(); // undefined, roto
// play내부의 this는 this를 실행시킨 객체인 roto : {memberName: - , play: f} 이기때문