2017-04-08 7 views
1

JS의 개체, 실행 컨텍스트에 대해 이해할 수없는 것이 있습니다.JavaScript의 실행 컨텍스트 및 개체

개체를 만들면 실행 컨텍스트가 만들어 집니까? 왜냐하면 함수가 호출 될 때 실행 컨텍스트가 생성되기 때문입니다. 그리고 그렇지 않은 경우, 객체는 실제 실행 컨텍스트에서 다른 변수와 비슷합니다.

감사합니다.

답변

4

개체를 만들면 실행 컨텍스트가 만들어 집니까? 함수가 호출 될 때

실행 컨텍스트 보낸 제

생성된다.

사실 그렇지만 객체를 만드는 것은 함수를 호출하는 것과 다릅니다.

그리고 그렇지 않으면 개체가 실제 실행 컨텍스트에서 다른 변수와 비슷합니다.

개체가 메모리에 존재하고 그것에 참조 어떤 변수 또는 재산 당신이 그것을 저장 존재합니다. 당신이 변수에 저장하면 해당 변수가 관련된 어휘 환경 객체에서 개최 변수가 선언 된 실행 컨텍스트

구체적인 예는 도움이 될 수 있습니다 :

function foo() { 
    var n = 42; 
    var o = {}; 
    console.log(n, o.toString()); // 42, [object Object] 
} 
foo(); 

foo를 호출하면 실행 컨텍스트와 연관된 어휘 환경 개체를 만듭니다. n 및 변수는 해당 어휘 환경에 저장된 바인딩입니다. n 바인딩 값은 기본 숫자 42입니다. o 바인딩 값은 개체에 참조입니다. 객체 자체는 메모리의 다른 곳에 존재합니다.

 
+−−−−−−−−−−−−−−−−−−−−+ 
| Execution Context | 
+−−−−−−−−−−−−−−−−−−−−+ +−−−−−−−−−−−−−−−−−−−−−+ 
| Current Lex Env |−−>| Lexical Environment | 
| (some other stuff) | +−−−−−−−−−−−−−−−−−−−−−+ 
+−−−−−−−−−−−−−−−−−−−−+ | n: 42    | +−−−−−−−−+ 
         | o     |−−>| Object | 
         | (some other stuff) | +−−−−−−−−+ 
         +−−−−−−−−−−−−−−−−−−−−−+ 

그러나 다시, 그 문맥과 어휘 환경이 아닌 객체를 생성하여, foo에 대한 호출에 의해 생성됩니다.

foo이 반환되면 foo 내에 클로저가 작성되지 않으면 실행 컨텍스트와 관련 어휘 환경이 가비지 수집 대상입니다.

질문의 대답을 조금 멀리하십시오 : foo 내에 클로저를 작성하고 foo이 반환 된 후에도 참조가 유지 된 경우 어휘 환경이 클로저에 의해 유지됩니다. 더 많은 것 클로저에 this question and its answers.

+1

자세한 내용은 (+1) – Christos