개발 공부/JavaScript

this 퀴즈

무우너대갈 2022. 7. 17. 16:54
반응형

다음의 코드가 실행되며 출력되는 내용은?

(Jason이 제작한 퀴즈를 들고 왔습니다..)

 

https://jason-log.vercel.app/JavaScript/this%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80./

 

this란 무엇인가.

자바스크립트에서 가장 어려운 개념을 뽑으라고 한다면 저는 와 실행컨텍스트를 선택할 것같은데요. 이번 post에서는 의 개념에 대해 알아보도록 해요. 상황에 따라 달라지는 this 자바스크립트

jason-log.vercel.app

 

var str = 'React';

function outer() {
    console.log(str)
    console.log(this) 

    function inner(){
        console.log(str)
        console.log(this)

    }
    var str = 'Hello';

    return inner;
}

var obj = {
    f: outer()
}

setTimeout(obj.f, 1000);

outer.apply({
    str:'Bye'
})

 

함수 실행은 총 몇 번 되는가?

 답 : 3번
// 해설
var obj = {
	f : outer();  // ()를 붙였기 때문에 함수 할당 및 실행
} 

setTimeout(obj.f, 1000); // 대표적인 window의 콜백 함수

outer.apply({ 
	//apply() : 주어진 this 값과 배열 (또는 유사 배열 객체) 로 제공되는 arguments 로 함수를 호출
    str : 'Bye';
})

 

해당 코드가 실행되며 출력되는 값의 순서는?

답 : obj => outer.apply => setTimeout()
// 해설
var obj = {
	f : outer(); // (1)
} 

setTimeout(obj.f, 1000); // (3) 1000ms 즉 1s 뒤에 실행됨

outer.apply({ // (3)
    str : 'Bye'; 
})

 

해당 코드가 실행되며 출력되는 값은?

더보기

f: outer()  출력

     str : undefined

     this : 전역객체

 

setTimeout(obj.f, 1000)  출력

// return된 inner 함수 실행

     str : Hello

      // inner 내부에 str 존재  => outerEnvironment를 통해 outer의 LE를 찾음 => 스코프 체인

     this : Timeout객체 or Window 객체

      // setTimeout은 콜백 함수

      // 크롬 개발자 도구에서 돌릴 시 window 객체 출력됨

 

outer.apply({ str : 'Bye'}) 출력 
     str : undefined 
     this : {str : 'Bye'}

    // this 값을 str에 새로운 값을 할당하여 넘김으로 설정함

반응형

'개발 공부 > JavaScript' 카테고리의 다른 글

JsDoc - JavaScript 문서화하기  (0) 2022.08.23
프로토타입  (0) 2022.07.19
클로저  (0) 2022.07.16
콜백  (0) 2022.07.15
this  (0) 2022.07.14