본문 바로가기

JavaScript

this와 var의 차이점



# 일반적인 함수 생성과 호출( this 와 var의 차이점 )

다음과 같이 일반적인 함수가 생성되어있다.
function Action(data){
    var a = data;
    this.b =data;
    var aa = function(){
        alert("함수 : "+data);
    }
    this.bb= function(){
        alert("함수 : "+data);
    }
    alert(a);
    alert(b);
}

이 함수를 호출하는방법은 바로 함수명으로 호출하는방법이 있다.
이는 함수를 호출한 시점에 해당함수를 순차적으로 실행한다.
따라서 맨마지막 alert()작업을 할 것이다.
또한 Action함수를 실행시 실행시점에 window객체에 this로선언된 b와 bb 두 속성이 추가된다.
따라서 Action함수호출다음 내부 this로 선언된 속성은 어디서든 접근가능하다!
( var로 선언된것은 범위가 함수 내부이므로 내부에서 자기들끼리 사용가능 )
( 단 var로 선언된 값을 return으로 외부로 돌려주는식으로는 사용가능 )
Action(123);    //    123
                //    123

다음은 123 123 을 내부 alert에 의해 수행하지만 a, b, aa(), bb() 는 못찾는다.(접근불가!!)
단지 함수호출에 대한 순차적인 일만 할 뿐이다.
Action(123).a
Action(123).b
Action(123).aa()

다음은 this로 선언된 속성이라 위 Action(123); 함수 호출시점에 window객체에 추가된다.
alert( b );                // 123
bb();                      // 함수 : 123


또다른 함수 호출방법은 함수를 객체화 시켜서 호출 하는방법이다.
자바와같이 new 키워드를 사용하는것이다.
alert( typeof Action);    --    function

var obj = new Action();
alert( typeof obj)          -- Object

이는 함수를 객체화시켜서 마치 자바의 메소드처럼 사용가능하다
따라서 함수내부에 선언된 this키워드는 생성된 객체의것이다.
따라서 객체명으로 this키워드에 외부에서 접근가능하다!!!
( 여전히 함수내부 var로 선언된 속성은 외부에서 접근 불가능하다!! 내부에서만 사용가능 )
( 여전히 내부에서 var값을 return으로 외부로 돌려준다면 사용가능 )
var obj = new Action(32);   //    32 출력  
                            //    내부 alert(b)에서 b는 찾지 못한다.( 에러가나면서 멈춤 )

// 객체 생성방식으로 접근시
// this요소에는 외부에서 접근가능
// var요소에는 외부에서 접근 불가능!
alert( obj.b );        //    32출력
alert( obj.a );        //    undefined
obj.aa();        //    마찬가지로 var로 선언되어서 접근불가






결론은 함수를 호출시 내부 this로 선언된변수나 내부함수들은 
호출시점에 window객체에 추가되고

함수를 그냥 호출하지않고 객체화시킨다면 내부 this로 선언된 속성은 window객체가 아닌
생성된 새로운객체의 속성에 추가된다!
function Jo(){
    return this;
}

var a = Jo();
alert( a instanceof Window );        // true

var b = new Jo();
alert( b instanceof Jo);             // true            





'JavaScript' 카테고리의 다른 글

폼태그 및 접근법  (0) 2019.03.04
이벤트 처리  (0) 2019.03.04
태그 속성 접근  (0) 2019.03.04
함수 선언방법  (0) 2019.03.04
자바스크립트 함수 기초  (0) 2019.03.04