(그 내부함수는 자신의 있었던 기억(=실행컨텍스트내용)을 가지고있다.)
(외부함수 outer에서 정의된 변수 a를 참조하는 내부함수 inner에서 발생하는 현상)
=> 과거에 내부함수가 가지고 있는 실행컨텍스트의 스코프체인과 관련된 스코프범위의 내용을 GC되지않고 기억하고있는 것
- 콜백함수 내부에서 외부 데이터를 사용하고자 할때
- 접근 권한 제어(정보 은닉) => 생성자 함수( return 사용) , 객체(Object.freeze) 둘다 가능
instance.__proto__
let a = [1,2,3]
console.log(a.constructor === Array) // true
원본을 제거하고 다른 대상으로 교체하는 것이 아니라 원본이 그대로 있는 상태에서 다른 대상을 그 위에 얹는다.
var Person = function(name){
this.name = name;
};
Person.prototype.getName = function(){
return this.name;
};
var iu = new Person('지금');
iu.getName = function(){
return '바로' + this.name;
};
console.log(iu.getName()); //바로지금
console.log(iu.__proto__.getName()); //undefined
다른 결과의 이유는 ? -> this가 서로 다르기때문
첫번째 console은 this가 iu이고 두번째 console은 this가iu.__proto__
이다.
var Person = function(name){
this.name = name;
};
Person.prototype.getName = function(){
return this.name;
};
Person.prototype.name = '김형욱'; //Person.prototype에 name이라는 프로퍼티 추가
var iu = new Person('지금');
iu.getName = function(){
return '바로' + this.name;
};
console.log(iu.getName()); //바로지금
console.log(iu.__proto__.getName()); //김형욱