Javascript

변수와 this 정리

킹king 2018. 5. 18. 13:01
반응형

1
2
3
4
5
var cat = "nabi";
function animal() {
    return cat;
}
animal(); //nabi
cs


함수 animal()안에는 cat이라는 변수가 함수 안에 없기 때문에,

위로 거슬러 올라가 밖에 있는 cat의 값을 가져옴.



1
2
3
4
5
6
var cat = "nabi";
function animal() {
    cat = "coco";
    return cat;
}
animal(); //coco
cs


함수 animal()안에는 cat이라는 변수가 함수 안에 있기 때문에,

위로 거슬러 올라갈 필요없이 안에 있는 cat의 값을 가져옴.


전역변수(바깥 변수)보다 지역변수(안에 변수)가 영향력이 세기 때문에!



1
2
3
4
5
6
7
var cat = "nabi";
var box = {
    animal : function() {
        return cat;
    }
}
box.animal(); //nabi
cs


객체 box안에 함수 animal()가 들어가있는데,

cat라는 변수가 함수 안에 없기 때문에,

위로 거슬러 올라가 밖에 있는 cat을 가져옴.



1
2
3
4
5
6
7
8
var cat = "nabi";
var box = {
    cat: "mimi",
    animal : function() {
        return cat;
    }
}
box.animal(); //nabi
cs


객체 box안에 함수 animal()가 들어가있는데,

cat라는 변수가 함수 안에 없기 때문에,

위로 거슬러 올라가 밖에 있는 cat을 가져옴.


box안에 있는 cat(mimi)는 변수가 아니고 프로퍼티 즉 객체의 속성이기 때문에 무시됨.



1
2
3
4
5
6
7
8
9
var cat = "nabi";
var box = {
    cat: "mimi",
    animal : function() {
        cat = "coco";
        return cat;
    }
}
box.animal(); //coco
cs


객체 box안에 함수 animal()가 들어가있는데,

cat이라는 변수가 함수 안에 있기 때문에,

위로 거슬러 올라갈필요 없이 안에 있는 cat의 값을 가져옴.



------------------------------------------------



1
2
3
4
5
var cat = "nabi";
function animal() {
    return this.cat
}
animal(); //nabi
cs


this는 객체 자신을 의미함.

함수 animal()의 객체는 사실 window임.

document.write 역시 앞에 window가 붙어있는 것임 생략한것뿐.


window.cat = nabi

window.animal().cat = 결국 nabi

그래서 nabi가 출력됨.



1
2
3
4
5
6
var cat = "nabi";
function animal() {
    cat = "coco";
    return this.cat
}
animal(); //coco
cs


this.cat = window의 cat을 찾아라.

그리고 그런 window의 cat은 맨처음에는 nabi였다가 후반에 나온 coco때문에 coco로 변함.

그래서 window(this).cat은 coco임.



1
2
3
4
5
6
7
var cat = "nabi";
var box = {
    animal: function() {
        return this.cat
    }
}
box.animal(); //undefined
cs


아까 animal()은 window 소속이였으나, 이제는 box라는 객체 안에 들어있기 때문에,

this는 box를 가리키게 됨.


그리고 box안에 cat이라는 변수는 없기 때문에 undefined가 출력됨.



1
2
3
4
5
6
7
8
var cat = "nabi";
var box = {
    cat: "mimi",
    animal: function() {
        return this.cat
    }
}
box.animal(); //mimi
cs


box안에 cat을 만들어주자 그 값이 출력되는 것을 볼 수 있음.



1
2
3
4
5
6
7
8
9
var cat = "nabi";
var box = {
    cat: "mimi",
    animal: function() {
        cat = "coco";
        return this.cat
    }
}
box.animal(); //mimi
cs


그런 함수 안에 지역 변수가 생성되도 이미 this 자체가 box를 의미하기 때문에 box.cat이 출력됨.




'Javascript' 카테고리의 다른 글

제이쿼리, 자바스크립트를 이용한 간단한 탭  (0) 2018.08.13
자바스크립트 문제 6  (0) 2018.05.22
function에 대한 개념  (0) 2018.05.15
자바스크립트 문제4  (0) 2018.05.15
자바스크립트 객체와 배열 차이  (0) 2018.05.08