nobodj
No SG 운동

javascript::this의 쓴맛 November 12, 2017

javascript에서 this의 애매함에 대해 들은 적이 있다. 애매함까지는 모르겠고, closure함수 테스트중 this의 한면을 만난거 같다.
closure함수는 변수가 셋팅된 환경까지 반환하기에 closure라 한다. 폐쇄된 거니까. 하지만, 객체의 함수는 보통 this라는 키워드를 가지고,선언된다. 그 함수를 변수에 담아서 사용하려고 한게 이번 주말의 화근이었다.

<script>
var obj = {
    name_ : "nobodj",
    introduce : function(){
        console.log("저는 ", this.name_,"입니다.");
    }
}
obj.introduce();//저는  nobodj 입니다.

var f = obj.introduce;
f();//저는  undefined 입니다.
</script>

이런 결과를 얻는다. 이게 바로 this로 인한 차이.
멀쩡히 nobodj를 찍어낼 줄 알았지만, undefined라고 토해냄.

javascript는 전역에 name이란는 변수(”)를 기본값으로 가지고 있다. 왜… 그래서 name_라는 변수명을 사용한거임.

<script>
var v = "v"//전역에 v변수 선언.

function withoutTHIS(v){
    return function(){
        console.log(v);
    }
}

function withTHIS(v){
    return function(){
        console.log(this.v);
    }
}

var k = withoutTHIS("k");//함수 argument로 v 전달.
k();//k

var t = withTHIS("t");
t();//v

</script>

t()의 결과가 “t”가 아닌 전역의 “v”가 되었다.
이와 같이 closure고 나발이고, this로 인해 환경을 다시 셋팅하고 있다.
잘 써먹으면 좋을래나…

No Comments on javascript::this의 쓴맛