전역객체 (window/global)
모든 객체는 전역객체의 프로퍼티 이다.
전역객체의 이름은 호스트 환경에 따라 다를 수 있다. (웹브라우저 : window / node.js : global)
function func(){
console.log('hello?');
}
func();
window.func(); // 위의 코드와 실행결과가 같음. // 점(.)이 있고, 그 앞에 있는 것은 객체이며, func함수는 window객체 안의 메소드 이다.
this
함수의 호출 맥락에 따라서, 상황에 따라서 달라진다.
함수나 메소드에서 this는 그 함수가 속해있는 객체를 가리킨다.
생성자에서의 this
var funcThis = null;
function Func(){
funcThis = this;
}
var o1 = Func();
if(funcThis === window){ // 전역에서 Func함수를 실행했을때, 함수내의 this는 window가 된다.
console.log('window');
}
var o2 = new Func(); // new를 이용해서 생성자를 호출하면 객체가 생성&반환 되므로 o2는 객체이다.
if(funcThis === o2){ // o2객체 안에서 this를 나타내므로 funcThis는 o2가 된다.
console.log('o2');
}
*생성자 Func안에서는 o2라는 객체를 참조할 수 없다. 아직 초기화가 되기 전이기 때문에.
함수도 객체이다???
원래 함수를 생성하는 방법은 아래와 같다.
var sum = new Function('x', 'y', 'return x+y;');
그러나 마지막인자인 함수의 본문이 길어지면 불편하므로,
우리가 평소에 사용하는 함수정의하는 방법인 함수 리터럴을 사용하는 것이다.
함수 리터럴를 사용해서 함수를 정의하면 다음과 같다.
function sum(x, y){
return x+y;
}
함수도 new를 이용해서 생성되므로 '객체'라고 할 수 있다.
그리고 그 객체안에 apply 와 call이라는 메소드를 가지고 있다.
apply와 call을 이용해서 this를 제어할 수 있다.
(참고) 함수의 호출(call & apply) bol-bbang.tistory.com/48
출처
'Front > Java Script' 카테고리의 다른 글
오브젝트의 가변성(참조형) & Spread Operator ([ ... ], { ... }) (0) | 2021.05.11 |
---|---|
상속 (prototype) (0) | 2021.04.29 |
객체의 생성 ( 생성자 & new ) (0) | 2021.04.20 |
함수의 호출(call & apply) (0) | 2021.04.20 |
arguments VS parameter (0) | 2021.04.20 |