2011-08-31 3 views
5

나는 초보 자바 스크립트 프로그래머이며, 더 배우려고 시도하고있다. 그래서 저는 여러분에게이 쉬운 질문으로 도움을 청합니다. :) O'Reilly 책은 JavaScript 코드의 컴파일 시간을 계속 참고합니다. 기능적 프로그래밍 (scheme and likes)에 대한 나의 지식은 자바 스크립트가 실제로 브라우저에 의해 해석되고 자바 스크립트를 두 번 통과해야한다는 것을 말해 준다.Javascript를 컴파일하거나 2 단계로 해석합니까?

평가가 잘못 되었습니까? 또는 책이 실제로 인터프리터의 첫 번째 패스를 참조하는 컴파일 타임인가? Perl이나 Python이 어떻게 작동 할 것인가? 감사!

+0

대부분의 동적 언어 구현은 먼저 입력을 구문의 추상 구문 트리로 "구문 분석"합니다.이 구문은 구문 오류가 감지 된 부분입니다. 그 후 AST는 직접 실행 ("walked") 될 수 있거나 일종의 내부 바이트 코드 및/또는 JIT로 변환 될 수 있습니다. 실행 방법은 ECMAScript 사양에 지정되어 있지 않으며 구현마다 크게 다릅니다. –

답변

11

브라우저에 따라 다릅니다. 가장 빠른 시점에서 WebKit의 SquirrelFish Extreme과 Google V8을 살펴보고 Mozilla의 JaegerMonkey를 살펴보십시오.

AFIAK V8 및 SFX는 JIT이므로 JS 코드를 기본 언어로 컴파일합니다. JaegerMonkey와 TraceMonkey는 Firefox에서 결합되어 코드가 더 빨리 추적 될 경우 TraceMonkey가이를 실행하고 코드가 더 빠른 경우 SFa처럼 코드를 컴파일합니다.

+0

실제로 +1, [ECMAScript 언어 사양] (http://www.ecma-international.org/publications/standards/Ecma)에 요약 된 의미를 제외하면 * ECMAScript가 실행되는 방법은 없습니다. -262.htm). –

+0

사용자 에이전트에 따라 자바 스크립트를 사전 컴파일하여 브라우저로 보낼 수 있습니까? – Ced

0

문맥을 돕기 위해 인용 할 수있는 문장이 있습니까?

자바 스크립트가 브라우저에서 컴파일됩니다 (일반 소스의 브라우저로 전송 됨). 그러나로드 될 때만 컴파일됩니다. 따라서 스크립트 태그 뒤에 div 태그와 스크립트 태그가 있으면 순차적으로 해당 태그를로드합니다. 브라우저는 스크립트가로드 될 때까지 (이는 스크립트가 'document.write'를 가질 수 있기 때문에 전체 페이지를로드하는 것을 멈 춥니 다. 리소스를 다운로드하고 HTML을로드하지 않습니다).

<script> 
var someVariable = 'hello world'; 
alert(document.getElementById('someid')); //alerts undefined 
</script> 

<div id='someid'></div> 

<script> 
alert(document.getElementById('someid')); //alerts 'someid' 
alert(someVariable); //alerts 'hello world' 
</script> 
0

는이시를 읽고 런타임 JS에서 (내가 정말 컴파일되지이기 때문에 그것을 생각 좋아하지만, 해석)입니다. O'Reilly의 책은 컴파일 타임을 읽기 시간의 동의어로 사용하는 것 같습니다.

읽기 시간은 엔진이 모든 코드를 읽고 전체 범위에서 모든 것을 평가할 때입니다. 일반적으로 코드 실행을 트리거하는 이벤트에 후크를 설정합니다.

런타임은 그 밖의 모든 것입니다.

관련 문제