JavaScript 컴파일 원칙에 대해 자세히 알아보기

WBOY
풀어 주다: 2022-07-15 15:02:10
앞으로
1826명이 탐색했습니다.

이 기사에서는 소개된 관련 문제를 주로 정리한 javascript에 대한 관련 지식을 제공합니다. Javascript는 Netscape의 LiveScript 유형에서 대소문자를 구분하는 클라이언트 스크립팅 언어로 개발된 프로토타입 상속 객체 지향 동적 언어입니다. , 모든 사람에게 도움이 되기를 바랍니다.

JavaScript 컴파일 원칙에 대해 자세히 알아보기

[관련 추천: javascript 동영상 튜토리얼, 웹 프론트엔드]

1. 단어 분할/어휘 분석

우선, 단어 분할이 무엇인지 알아보겠습니다. 문자열을 프로그래밍 언어의 의미 있는 코드 블록으로 변환합니다. 이러한 코드 블록을 토큰이라고 합니다. 예를 들어 var a = 2 코드는 다음 어휘 단위로 분해됩니다. 구체적으로는 var,a,=,2입니다. var a = 2这段代码,会被分解为下面的词法单元。具体为:var,a,=,2。
注意:分词其实就是将上面的整段代码进行一个拆分为一段一段。

2.解析/语法分析

解析就是将词法单元流转换为一个有元素逐级嵌套所组成的代表了程序语法结构的树。这个树被称为:抽象语法树。鉴于这里过长的标准词,就不做考虑了,本人直接以一种更加直观的形式展示。具体如下图:
JavaScript 컴파일 원칙에 대해 자세히 알아보기
解析:抽象语法树会有一个var的顶级节点,之后会有一个变量为a的子节点以及赋值符=的一个节点。在赋值符下又有一个为2的子节点。具体就对应了var a = 2这段代码。

3.代码生成

将抽象语法树转换为可执行代码的过程被称为代码生成。这个过程与语言,目标平台息息相关。简单来说就是有某种方法可以将var a = 2참고: 단어 분할은 실제로 위의 전체 코드를 여러 섹션으로 분할하는 것입니다.

2. 파싱/문법 분석

파싱은 어휘 단위 스트림을 레벨별로 중첩된 요소로 구성된 트리로 변환하는 것으로, 이는 프로그램 구문 구조를 나타냅니다. 이 트리를 추상 구문 트리라고 합니다. 여기서는 지나치게 긴 표준어를 고려하여 이를 보다 직관적인 형태로 직접 표시하지 않겠습니다. 구체적인 사진은 다음과 같습니다:

분석: 추상 구문 트리에는 var에 대한 최상위 노드가 있고 그 뒤에 변수 a가 있는 하위 노드와 할당 연산자 =가 있는 노드가 있습니다. 할당 기호 아래에 또 다른 하위 노드 2가 있습니다. 구체적으로 var a = 2 코드에 해당합니다.

3. 코드 생성

추상 구문 트리를 실행 가능한 코드로 변환하는 과정을 코드 생성이라고 합니다. 이 프로세스는 언어 및 대상 플랫폼과 밀접한 관련이 있습니다. 간단히 말해서 var a = 2의 추상 구문 트리를 기계 명령어로 변환하는 방법이 있습니다. a라는 변수를 만들고 a에 값을 저장하는 데 사용됩니다.

4.LHS 및 RHS 쿼리

JavaScript 코드 실행은 주로 엔진에 의존합니다. 엔진이 var a = 2를 실행하면 변수 a가 선언되었는지 검색하여 확인합니다. 검색 프로세스는 범위의 도움을 받습니다. 쿼리 프로세스 동안 엔진은 변수 a에 대해 LHS(왼쪽 쿼리)를 수행하고 값에 대해 오른쪽 쿼리를 수행합니다. 쉽게 말하면 할당 연산의 왼쪽에 변수가 나타나면 LHS 쿼리를 수행하고 오른쪽에 변수가 나타나면 RHS 쿼리를 수행합니다. 보다 정확하게 말하면 LHS 쿼리는 변수 자체의 컨테이너를 찾으려고 시도하고 RHS 쿼리는 소스 값을 얻으려고 시도합니다.

참고: 함수에는 LHS 및 RHS 쿼리가 모두 있습니다. 매개변수를 전달하는 과정에서 코드는 암시적 할당을 수행하기 때문입니다.

5. 예외

변수가 선언되지 않은 경우 LHS 쿼리와 RHS 쿼리의 동작이 다릅니다.

function foo(a){
    console.log(a+b);
    b=a;}foo(2)
로그인 후 복사
참고: b에 대한 첫 번째 오른쪽 쿼리는 변수를 찾을 수 없습니다. 즉, 관련 범위에서 찾을 수 없기 때문에 선언되지 않은 변수라는 의미입니다. RHS가 중첩된 범위에서 필요한 변수를 찾을 수 없는 경우 엔진은 예외를 발생시킵니다. 6. 퀴즈🎜
function foo(a){
  var b=a;
  return a+b;
 }
 var c=foo(2)
로그인 후 복사
🎜질문: 모든 LHS 질의와 RHS를 찾으세요🎜 정답: LHS(c=…,a=2,b=…) 및 RHS(foo(2…,=a,a…, …b) )🎜🎜[관련 추천: 🎜javascript 비디오 튜토리얼🎜, 🎜웹 프론트엔드🎜]🎜

위 내용은 JavaScript 컴파일 원칙에 대해 자세히 알아보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!