함수의 환경 정보
- 함수를 선언할 때 결정되는 것 👉 함수의 scope
- 함수를 호출할 때 결정되는 것 👉 함수의 this
this === 함수를 호출한 대상
var name = '나전역';
var person = {
name: '이지역',
getName: function() {
console.log(this, this.name);
},
}
// 어떻게 호출되었는지에 따라 함수의 this가 동적으로 결정됨
person.getName(); // person 객체, '이지역' 출력
var getName = person.getName;
getName(); // global(window) 객체, '김전역' 출력
bind
메소드는 immutable, 즉 원본 변경을 하지 않고 복제본을 반환하므로 반드시 새 변수에 할당해줘야한다.call
, apply
메소드는 this가 될 객체와 값을 차례로 매개 변수로 넣고 그 함수를 호출하며, 그 결과를 반환한다. (bind
와 차이점 인지하기)var bindedGetName = getName.bind(person);
bindedGetName(); // person 객체, '이지역' 출력
getName.call(person); // person 객체, '이지역' 출력
getName.apply(person); // person 객체, '이지역' 출력
var btn = document.getElementById('btn');
btn.addEventListener('click', person.getName);
// btn 클릭시 -> btn 객체, undefined 출력
btn.addEventListener('click', getName);
// btn 클릭시 -> btn 객체, undefined 출력
// 단, 이미 강제로 binding된 있는 함수를 전달하면 this가 바뀌지 않는다.
btn.addEventListener('click', bindedGetName);
// btn 클릭시 -> person 객체, '이지역' 출력