웹 브라우저를 제어하기 위해서 브라우저를 객체화
브라우저 객체 모델 == 브라우저를 제어하기 위한 인터페이스
defer
속성 - HTML 파싱과 함께, 비동기로 JavaScript 파일을 불러온다.async
속성 - HTML 파싱과 함께, 비동기로 JavaScript 파일을 불러온다.호출한 놈이 없을 경우에는 기본적으로 window 객체
예외
예시
let person = {
fullName : "짐코딩",
age : 20,
printThis : function(){
console.log(this);
console.log('this === person',this === person);
console.log('this === window',this === window);
}
}
//person에 의해서 호출됨 - this는 person
person.printThis();
//this는 윈도우 객체
let printThis = person.printThis;
//window객체가 호출
printThis();
function printThis(){
console.log(this);
}
let person1 = {
name : '홍길동1',
printThis : printThis,
}
//person1이 호출
person1.printThis();
let person2 = {
name : '홍길동2',
printThis : printThis,
}
//person2가 호출
person2.printThis();
let btn = document.querySelector('button');
btn.addEventListener('click',function()
{
//내부적으로 클릭한 btn이 호
console.log(this);
console.log(this === btn); // true
})
//ES5 bind - this 설정
function printThis(){
console.log(this);
}
let person1 = {
name : '홍길동',
}
//window객체 -> person1으로 바인딩
//bind는 원래 함수에 한번만 가능!
let printThis1 = printThis.bind(person1);
printThis1();
//bind(this)는 person
let person = {
name:'짐코딩',
age : 20,
hello : function(){
setTimeout((function(){
console.log(this);
console.log(this.name);
console.log(this.age);
}).bind(this), 1000);
}
}
person.hello();
let person = {
name:'짐코딩',
age : 20,
hello : function(){
//상위스코프
//여기서 this는 호출한 놈인 person
setTimeout(()=>{
//익명함수
//상위스코프에서 물려받음
console.log(this);
console.log(this.name);
console.log(this.age);
}, 1000);
}
}
person.hello();