Identifiers(식별자)를 찾는 일련의 과정
var a = '전역 변수'
function outFunc(){
var a = '지역 변수'; (A)
function inFunc(){
console.log(a); (B)
}
inFunc();
}
outFunc(); // '지역 변수'
this.x = 9; // 전역 스코프에서 this는 전역객체 window
var module = {
x: 81,
getX: function() { return this.x; }
};
module.getX(); // 81
// module object의 메소드에서 불러냈으므로, this는 해당 객체 module
var retrieveX = module.getX;
retrieveX(); //9
// 변수에 메소드를 할당하게 되면, 단순 일반 함수를 작성한 것과 동일
// 즉 함수가 실행되었을 때 this는 전역객체
// 하지만 bind를 이용해 명시적으로 바인딩해 줄 수도 있다.
var boundGetX = retrieveX.bind(module);
// module과 바인딩된 'this'가 있는 새로운 함수 생성
boundGetX(); // 81
call()
, apply()
메소드를 통해서도 명시적으로 바인딩해 줄 수 있다.bind()
메소드의 차이점은 함수를 반환한다는 것이다.bind()
메소드로 this와 module을 명시적으로 바인딩한 후 새로운 변수에 할당하는 것도 가능.call()
, apply()
는 명시적으로 바인딩 후 곧 바로 함수를 실행하기 때문에 변수에 할당하는 것은 어렵다.