[221125] this - 전역공간

뜨개발자·2022년 11월 25일
0

TIL

목록 보기
14/75

함수와 객체(메소드)의 구분이 느슨한 자바스크립트에서, this는 실질적으로 이 둘을 구분하는 거의 유일한 기능이다.

상황에 따라 달라지는 this

this는 기본적으로 실행 컨텍스트가 생성될 때 함께 결정된다.,
바꿔 말하면, this함수를 호출할 때 결정된다.

  1. 전역공간

    전역 컨텍스트를 생성하는 주체가 전역 객체이기 때문에, 전역 공간에서 this전역 객체를 가리킨다.
    브라우저 환경에서 전역 객체는 window이고, Nods.js 환경에서는 global이다.

    //전역공간에서의 this (브라우저 환경)
    console.log (this)				//{ alert: f(), atob: f(), blur: f(), ... }
    console.log(window)				//{ alert: f(), atob: f(), blur: f(), ... }
    console.log(this === window)	//true
    //전역공간에서의 this (Node.js 환경)
    console.log(this)					//{ process: { title: 'node', version: '', ... } }
    console.log(global)					//{ process: { title: 'node', version: '', ... } }
    console.log(this === gloabal)		//true

    전역 공간에서는 var로 변수를 선언하는 대신 window의 프로퍼티에 직접 할당하더라도 결과적으로는 똑같이 동작한다.

    var a = 1
    window.b = 2
    console.log(a, window.a, this.a)			// 1 1 1
    console.log(b, window.b, this.b)			// 2 2 2
    
    window.a = 3
    b = 4
    console.log(a, window.a, this.a)			// 3 3 3
    console.log(b, window.b, this.b)			// 4 4 4

    그러나 '삭제' 명령에 대해서는 전혀 다르게 작동한다.

    var a = 1
    delete window.a							// false
    delete a								// false
    console.log(a, window.a, this.a)		// 1 1 1
    
    window. b = 2, c = 3
    delete window.b							// true
    delete c								// true
    console.log(b, window.b, this.b)		// Uncaught ReferenceError: b is not defined
    console.log(c, window.c, this.c)		// Uncaught ReferenceError: c is not defined

    처음부터 전역객체의 프로퍼티로 할당한 경우에는 삭제가 되는 반면, 전역변수로 선언한 경우에는 삭제가 되지 않는다.
    사용자가 의도치 않게 삭제하는 것을 방지하는 차원의 방어 전략으로 해석할 수 있다.

profile
뜨개질하는 개발자

0개의 댓글