2012-06-05 3 views

답변

5

http://perfectionkills.com/understanding-delete/#execution_context를 인용하려면 :

모든 실행 컨텍스트는 소위 Variable Object 그것으로 연관이있다. 실행 컨텍스트와 유사하게 Variable 객체는 추상 엔티티이며, 변수 인스턴스화를 설명하는 메커니즘입니다. 자, 근원 부분은 소스 텍스트에서 선언 된 변수와 함수가 실제로 이이 변수 객체의 속성으로 추가되었다는 것입니다.

컨트롤이 글로벌 코드의 실행 컨텍스트를 입력하면 Global objectVariable object으로 사용됩니다. 선언 된 변수 또는 기능 세계적 그러면서 Global object

의 속성이 될 이유는 정확하게,이 Variable Object들에 액세스 할 수 없습니다. 유일하지 않은 내부 객체는 전역 객체 인 window 또는 this (전역 컨텍스트에서)입니다.

사양의 관련 섹션은 #10: Executable Code and Execution Contexts입니다.

+0

'window' 객체는 전적으로 글로벌'Variable Object'처럼 행동하기 위해서 존재합니까? – ddlshack

+1

Ecmascript 자체는'window' 객체를 필요로하지 않습니다. * [전역 개체] (http://es5.github.com/#x15.1)에는 추가 호스트 정의 속성이있을 수 있습니다. * 예를 들어, HTML 사양은 [Window 인터페이스] (http : // www .w3.org/TR/html5/browsers.html # the-window-object) – Bergi

0

그들은 그들 만이 선언하고있는 기능을 사용할 수있어.

기능의 범위는 다른 {} 언어 블록 범위 지정과는 달리, BTW, 자바 스크립트에서 유일하게 다른 범위입니다.)

재 : 귀하의 편집 바보짓을하지 마십시오 - JS의 this의 의미가 약간 불쾌합니다. IMO 은 다양한 상황에서 기대 한 바가 아닐 수도 있습니다.

+0

제 편집이 잘못되었습니다. 귀하의 게시물에 관한 : 왜 글로벌 변수가 창 개체에 할당되어 있습니까? – ddlshack

+0

@ddlshack 브라우저 영역에서 전역 범위가있는 곳이기 때문에. –

0

내부 자기 호출하는 익명 함수의 예 :

function() { 
    .... 
}() 

모든 변수가 내부에 남아있는 글로벌 객체 또는 window에 자신을 첨부하지 않습니다. 이 기술을 사용하면 module/singleton pattern과 같은 패턴이 생성됩니다.

JS에서 변수의 범위는 이고 범위는입니다.

2

JavaScript에서는 모든 변수가 특정 범위 개체에 할당됩니다. 그러나 브라우저의 JavaScript에서는 window 객체를 통해 전역 변수의 범위 객체에만 액세스 할 수 있습니다. 함수 범위의 변수는 JavaScript 런타임에서 내부적으로 사용하는 범위 객체에 할당되지만 사용자가 액세스 할 수는 없습니다.

또 다른 환경에서는 전역 변수가 다른 개체의 속성 (예 : GLOBAL : node.js)으로 액세스 할 수 있거나 액세스 할 수없는 경우가 있습니다 (예 : Windows 스크립트 호스트에서 실행되는 응용 프로그램 스크립트).

+0

왜 전역 범위 개체가 내부 개체가 아니거나 반대로 전역 개체가 아닌 개체에 액세스 할 수없는 이유는 무엇입니까? 일치하지 않는 것 같습니다. – ddlshack

+0

스코프 객체는 * 직접 * 액세스 할 수 없습니다. 그러나 코드의 모든 부분은 자체 범위의 변수뿐만 아니라 부모 범위의 변수에 액세스 할 수 있습니다. 글로벌 스코프가 다른 스코프 오브젝트의 부모 스코프이므로 항상 유용합니다. – Gareth

+0

@Gareth가 좋은 지적입니다. 우리가 모든 스코프 객체에 직접 접근 할 수 있다면, 가비지 컬렉터는 참조를 정리하는 데 시간이 많이 걸릴 것입니다. 전역 범위는 다른 모든 범위를 래핑하므로 항상 사용할 수 있으며 스크립트가 종료 될 때만 가비지 수집 될 수 있습니다. –

관련 문제