이 기사는 JavaScript의 작동 원리에 대해 자세히 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
자바스크립트 연산의 원리
그것이 무엇인지, 왜 그런지 알아보세요. 여기서는 주로 자바스크립트 연산의 원리에 대한 이해를 이야기하겠습니다.
JAVA 가상 머신
우선 JAVA 가상 머신부터 시작해 보겠습니다.
먼저 가상 머신을 만들어야 하는 이유에 대해 이야기해 보겠습니다. 머신이 다르기 때문에 가상 머신이 없으면 머신마다 코드를 컴파일해야 하는데 이는 확실히 무리입니다. 따라서 이 문제를 해결하기 위해 Java는 최종 대상 플랫폼이 무엇이든 상관없이 컴파일된 코드를 가상 머신에서 직접 실행할 수 있도록 하는 가상 머신(VM) 개념을 도입합니다. 가상머신이 나오면 한번 컴파일해서 어디서나 실행하는 효과를 얻을 수 있습니다.
기본적으로 Java와 C#은 네이티브 언어가 아닙니다. 컴파일의 결과는 기계 명령어가 아니라 일종의 자체 명령어 형식으로 실행될 수 없으며 이를 해석하고 실행하려면 특별한 프로그램이 필요합니다. 우리가 "가상 머신"이라고 부르는 것.
반대로 C, C++, Go, Rust 같은 언어는 네이티브 언어이고, 컴파일된 결과는 스스로 직접 실행할 수 있는 기계 명령어입니다. "가상 머신"이라는 개념이 없습니다.
JavaScript 엔진
JavaScript 엔진이 수행하는 작업은 JAVA 가상 머신과 매우 유사합니다
무엇을 하는지
JS 엔진은 주로 JS 코드에 대한 어휘, 문법 및 기타 분석을 수행하고 컴파일합니다. 컴파일러를 통해 코드를 컴퓨터가 실행할 수 있는 실행 가능한 기계어 코드로 변환합니다.
간단히 말해서 유일한 목적은 JavaScript 코드를 읽고 컴파일하는 것입니다. 즉, JavaScript 코드를 분석, 해석, 최적화 및 가비지 수집할 수 있다는 의미입니다.
실행 프로세스
JavaScript 엔진은 소스 코드를 로드하고 이를 문자열로 분해(단어 분할이라고도 함)한 다음 이러한 문자열을 컴파일러가 이해할 수 있는 바이트 코드로 변환한 다음 이 바이트 코드를 실행합니다.
Google의 V8 엔진은 C++로 작성되었으며 JavaScript 소스 코드를 컴파일 및 실행하고 메모리 할당 및 가비지 수집을 처리할 수도 있습니다. 소스코드를 직접 기계어 코드로 컴파일할 수 있는 두 개의 컴파일러로 구성되도록 설계되었습니다. 구체적인 실행 과정은 다음 단계로 볼 수 있습니다.
소스 코드를 다음과 같이 분해하는 어휘 분석을 수행합니다. 일련의 명확한 의미 기호 또는 문자열입니다.
그런 다음 구문 분석기를 사용하여 이러한 기호를 분석하고 구문 트리로 구축합니다.
그런 다음 4개의 JIT(Just-In-Time) 프로세스가 참여하기 시작하여 파서에서 생성된 바이트코드를 분석하고 실행합니다.
ECMAScript와의 관계
정확하게 말하면 각 JavaScript 엔진은 ECMAScript 버전을 구현하며 JavaScript는 그 분기입니다. ECMAScript가 계속 발전함에 따라 JavaScript 엔진도 계속해서 개선되고 있습니다. 다양한 엔진이 있는 이유는 각 엔진이 서로 다른 웹 브라우저, 헤드리스 브라우저 또는 Node.js와 같은 런타임 환경에서 실행되도록 설계되었기 때문입니다.
JavaScript 엔진은 프로그램이고, 우리가 작성하는 JavaScript 코드도 프로그램입니다. 어떻게 하면 프로그램이 프로그램을 이해하게 만들 수 있을까요? 이를 위해서는 규칙 정의가 필요합니다. 예:
var a = 1 + 1
왼쪽의 var는 변수 a를 선언하는 선언을 나타냅니다.
오른쪽의 +는 1과 1의 추가를 나타냅니다.
가운데 등호는 대입문을 나타냅니다.
끝의 세미콜론 이 문장이 끝났음을 나타냅니다
이것이 규칙입니다. 여기에는 측정 표준이 있습니다. JavaScript 엔진은 이 표준에 따라 JavaScript 코드를 구문 분석할 수 있습니다. 그런 다음 ECMAScript는 이러한 규칙을 정의합니다. 그 중 ECMAScript 62 문서는 JavaScript 언어에 대한 완전한 표준 세트를 정의합니다. 여기에는 다음이 포함됩니다.
var, if, else, break, continue 등은 JavaScript 키워드입니다.
abstract, int, long 등은 JavaScript 예약어입니다.
숫자로 계산하는 방법, 문자열로 계산하는 방법 등
정의된 연산자( +, -, >, < 등)
JavaScript의 구문을 정의합니다.
==를 처리하는 방법과 같은 표현식, 명령문 등에 대한 표준 처리 알고리즘을 정의합니다.
표준 JavaScript 엔진은 다음을 따릅니다. 이 문서 세트 이를 구현하려면 IE의 JS 엔진과 같이 표준을 따르지 않는 구현도 있기 때문에 여기에서는 표준에 중점을 둡니다. 이것이 JavaScript에 호환성 문제가 있는 이유입니다. IE의 JS 엔진이 표준에 따라 구현되지 않는 이유는 브라우저 전쟁에 관한 것이므로 여기서는 Google에서 직접 설명하지 않겠습니다.
쉽게 말하면 ECMAScript는 언어의 표준을 정의하고, JavaScript 엔진은 이에 따라 이를 구현합니다.
RunTime
런타임은 단순히 현재 실행 중인 환경으로 이해될 수 있습니다. 다양한 환경은 웹 브라우저의 창 개체, DOM 관련 API 등과 같은 다양한 API 호출을 제공합니다. 이러한 인터페이스는 관련 JS 호출을 제공할 수 있습니다
위 내용은 JavaScript 작동 방식에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!