JavaScript 엔진은 어떻게 작동합니까?
1. 실행 언어 환경
실행 컨텍스트는 특정 유형의 JavaScript 코드를 실행하는 환경 또는 환경입니다.JS 코드의 실행은 컨텍스트의 변화에 따라 달라집니다.모든 실행에는 특정한 속성이 있고, 그것들도 비슷한 속성을 공유한다.실행 컨텍스트에는 세 가지 유형이 있습니다.
test()
함수 내의 연녹색은 eval 집행 상하문이다.걱정하지 마세요. 우리는 잠시 후에 이런 서로 다른 배경을 토론할 것입니다.따라와.좋다🦾🐱👤2, 실행 스택
알다시피 컴퓨터 과학의 한 무더기는 책, 접시, 도넛과 같다🍩 위의 표지 사진에서책더미는 후진선출(LIFO)이다. 즉, 네가 방금 push
책더미 속의 책은 책더미 밑에 있고, 네가 마지막으로 책더미 속에 넣은 책은 책더미에서 쉽게 꺼낸 다음에 책더미 밑에서 꺼낸다.따라서 이런 성질은 컴퓨터 과학에도 마찬가지다.실행 창고에서, 창고는books가 아닌 전역 상하문, 함수 상하문, eval 상하문을 포함합니다.스택은 JavaScript 엔진이나 모든 컴파일러 또는 해석기가 실행하는 현재 명령을 추적합니다.우선, 창고의 전역 상하문은 창고의 밑부분까지 저장되고, 나머지 함수나 eval 상하문은 JS 코드의 순서에 따라 창고에서 서로 발생합니다.JS 엔진이 모든 함수나 eval을 실행할 때 창고에서 함수나 eval 상하문pop
을 꺼냅니다.push
및 pop
은 일부 프로그래밍 언어에서 자주 사용하는 명령으로 창고에서 데이터를 배치하거나 가져오는 데 사용된다.
3. 글로벌 실행 컨텍스트
위의 그림에서 보듯이 모든 실행 창고는 전역 실행 상하문만 포함합니다.글로벌 환경에서 어떤 종류의 코드를 실행합니까?물론 어떤 함수에도 없는 코드입니다.JavaScript 프로그램을 실행할 때 글로벌 컨텍스트는 첫 번째로 실행 스택으로 전송되는 컨텍스트입니다.
let myName = `Vijay`;
let hobby = `painting`;
function display(myName,hobby) {
console.log(`My name is ${myName} and My hobby is ${hobby}.`);
}
/*
* Anything outside the functions which represent function execution context are
* all inside global execution context.
*/
4. 기능 실행 컨텍스트
JavaScript 프로그램에서 함수를 실행할 때 함수를 나타내는 객체가 실행 스택으로 전송됩니다.푸시 함수 실행 상하문 대상은 두 단계가 있다.구체적으로 다음과 같습니다.
위의 그림에서 보듯이 모든 실행 창고는 전역 실행 상하문만 포함합니다.글로벌 환경에서 어떤 종류의 코드를 실행합니까?물론 어떤 함수에도 없는 코드입니다.JavaScript 프로그램을 실행할 때 글로벌 컨텍스트는 첫 번째로 실행 스택으로 전송되는 컨텍스트입니다.
let myName = `Vijay`;
let hobby = `painting`;
function display(myName,hobby) {
console.log(`My name is ${myName} and My hobby is ${hobby}.`);
}
/*
* Anything outside the functions which represent function execution context are
* all inside global execution context.
*/
4. 기능 실행 컨텍스트
JavaScript 프로그램에서 함수를 실행할 때 함수를 나타내는 객체가 실행 스택으로 전송됩니다.푸시 함수 실행 상하문 대상은 두 단계가 있다.구체적으로 다음과 같습니다.
작성 단계
작성 단계에서 함수를 작성하여 컨텍스트 객체를 실행합니다.만약 우리가 더욱 깊이 있게 집행 대상을 한다면 우리는 그것을 두 가지 환경으로 나눌 수 있다.
어휘 환경
어휘 환경은 표지부(변수 또는 함수 이름)와 변수 자체의 표시 또는 구성으로 특정 구조에서 원어 값이나 대상에 대한 인용이다.이 환경에는 부모 어휘 환경에 대한 인용도 포함되어 있다.우리는 더욱 깊은 방향으로 발전하고 있다.걱정하지 마세요. 제가 마지막으로 전체 문장을 정리할 것입니다. 이것은 우리가 주목하는 마지막 세부 사항이 될 것입니다.따라서 우리는 어휘 환경을 세 부분으로 나눌 수 있다.
undefined
속성을 생성합니다.Please notice this place, we will reference later to this point in the HOISTING section of this article.
let myName = `Vijay`;
let hobby = `painting`;
const greet = `Hello`;
function display(myName,hobby,birthYear) {
function age(birthYear){
return 2020-birthYear;
}
console.log(`${greet}! My name is ${myName} and My hobby is ${hobby}.`);
}
/*
* Anything outside the functions which represent function execution context are
* all inside global execution context.
*/
함수 연령에 대해 그 범위 체인은 국부 범위, 그 부 함수의 범위display
와 전역 함수 범위를 포함한다.만약 이 함수가 전역 범위 내의 변수(예를 들어 greet
에 접근해야 한다면, 그 부분 범위 내에서 greet
변수를 찾을 것이다.변수를 찾지 못하면 상위 함수 범위에서 상위 레벨을 검색합니다.만약 그것이 그곳에서도 찾지 못한다면, 그것은 전 세계로 옮겨질 것이다.이것은 범위 체인이라고 불린다.this
키워드에 헷갈린다.아래의 코드 문장을 보십시오.//this.(method or function or property);
실제로 코드에서 this.
을 찾았을 때, this
는 통상적으로 그 작용역을 호출하는 대상을 가리킨다.함수에서 this
키워드를 사용하면 this
브라우저에서 전역 창 객체에 표시됩니다.만약 어떤 방법이나 속성을 사용해서 그것을 호출한다면, 그것은 이 방법을 호출하는 특정한 대상에 속한다.this
키워드가 있는 함수를 호출하기 전에는 값을 지정하지 않습니다.class People(){
constructor(name,age){
this.name = name;
this.age = age;
}
display(){
// 'this' inside this method is not referencing to any object yet. It will
// reference to an object when it is invoked.
console.log(`My name is ${this.name} and I am &{this.age} years old`);
}
}
const vijay = new People('Vijay',19);
// Here, `this` from the display function reference to the vijay
// object
vijay.display();
function getThis(){
// 'this' in the statement point to the browser's window object which is in
// global scope
console.log(this);
}
/*
* Anything outside the functions which represent function execution context are
* all inside global execution context.
*/
가변 환경
변수 환경과 어휘 환경은 거의 같다.변수 환경은 변수 대상(VO), 범위, 범위 체인과
this
귀속도 가지고 있다.ES6 이후의 차이점은 하나입니다.함수let
와 const
를 저장하는 어법 환경에 사용되며, 그 중에서 변수 환경은 var
에 사용된다.실행 단계
이 단계에서 코드를 실행합니다.변수는 적당한 값을 부여하고 함수는 그 작업을 완성한다.창고로 보내는 모든 함수는 선착순으로 실행됩니다.함수를 실행할 때, 함수 실행 상하문은 실행 창고에서 삭제됩니다.
5、조립
모든javascript 개발자들은 향상의 개념을 알아야 한다.이것은 ES2015와 함께 탄생한 새로운 명사다.실제 개념은 우리가 자바스크립트에서 변수나 함수를 설명할 때 설명하기 전에 사용할 수 있다는 것이다.코드로 설명해 드릴게요.우리는 이 블로그에서 변수 대상(VO) 부분을 언급할 것이다.
// Hoisting with a variable.
console.log(name);
/*
*The console output will be "undefined" because of the hoisting enables the
*variable available at the interpreting time.
*/
var name; // Declaration
name = "Vijay"; // Initialization
console.log(name); // Output will be "Vijay"
// Hoisting with function
age(1999,2020);
/*
* In the case of a function, the output will be "21" instead of "undefined"
*because the function performed its operation during interpretation.
*/
function age(birthYear,currentYear){
console.log(currentYear - birthYear);
}
age(2000,2020); // Output will be "20"
위의 코드와 VO 부분에서 인용한 바와 같이, 우리는 변수를 설명할 때, 설명 기간에 향상되기 때문에, 변수가 분배될 것이라는 것을 알고 있다undefined
.변수가 하나의 값으로 초기화되면 향상으로 인해 아무런 영향을 미치지 않습니다.그 중에서 함수 성명은 프로그램이 코드의 성명 문장 앞에서 함수를 사용할 수 있도록 한다.이것들은 모두 향상된 효과다.기술 용어에서 해석 과정에서 메모리에 있는 이 변수에 대해 변수 성명을 하는데 이것은 함수와 같다.이것이 바로 우리가 변수와 함수를 설명하기 전에 그것들에 접근할 수 있는 이유이다.
6. Eval 실행 컨텍스트
마지막으로 가장 중요하지 않은 것은 eval이 상하문을 실행하는 것이 아니다.대부분의 프로그래머들이 그것을 사용하지 않기 때문에, 우리는 eval 실행 상하문에 대해 상세하게 토론할 생각은 없다.그것은 이미 유행이 지났다.이것은 브라우저가 eval을 여전히 지원하지만, 곧 시작될 새로운 프로젝트에서 eval을 사용하지 않는 것이 가장 좋다는 것을 의미한다.실제 기능은 실행 문자열일 뿐,javascript 코드일 뿐입니다.
// Eval execution context
console.log(eval(`2+2`)); // the console output will be "4"
console.log(eval('2 + 2') === eval(new String('2 + 2'))); // the console output will be "false"
우리 블로그는 여기서 끝냅니다.나는 내가 가능한 한 많은 JS에 관한 지식을 제공하기를 바란다. 너는 아래의 문장을 읽을 수 있고, 이 문장들은 더욱 상세하게 설명할 것이다.
한층 더 읽다
The Ultimate Guide to Hoisting, Scopes, and Closures in JavaScript
eval() and eval execution context
Understanding Execution Context and Execution Stack in Javascript
Cover Photo by Sharon McCutcheon from Pexels
Reference
이 문제에 관하여(JavaScript 엔진은 어떻게 작동합니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/vijaykumarktg18/how-does-javascript-engine-work-532b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// Hoisting with a variable.
console.log(name);
/*
*The console output will be "undefined" because of the hoisting enables the
*variable available at the interpreting time.
*/
var name; // Declaration
name = "Vijay"; // Initialization
console.log(name); // Output will be "Vijay"
// Hoisting with function
age(1999,2020);
/*
* In the case of a function, the output will be "21" instead of "undefined"
*because the function performed its operation during interpretation.
*/
function age(birthYear,currentYear){
console.log(currentYear - birthYear);
}
age(2000,2020); // Output will be "20"
마지막으로 가장 중요하지 않은 것은 eval이 상하문을 실행하는 것이 아니다.대부분의 프로그래머들이 그것을 사용하지 않기 때문에, 우리는 eval 실행 상하문에 대해 상세하게 토론할 생각은 없다.그것은 이미 유행이 지났다.이것은 브라우저가 eval을 여전히 지원하지만, 곧 시작될 새로운 프로젝트에서 eval을 사용하지 않는 것이 가장 좋다는 것을 의미한다.실제 기능은 실행 문자열일 뿐,javascript 코드일 뿐입니다.
// Eval execution context
console.log(eval(`2+2`)); // the console output will be "4"
console.log(eval('2 + 2') === eval(new String('2 + 2'))); // the console output will be "false"
우리 블로그는 여기서 끝냅니다.나는 내가 가능한 한 많은 JS에 관한 지식을 제공하기를 바란다. 너는 아래의 문장을 읽을 수 있고, 이 문장들은 더욱 상세하게 설명할 것이다.한층 더 읽다
The Ultimate Guide to Hoisting, Scopes, and Closures in JavaScript
eval() and eval execution context
Understanding Execution Context and Execution Stack in Javascript
Cover Photo by Sharon McCutcheon from Pexels
Reference
이 문제에 관하여(JavaScript 엔진은 어떻게 작동합니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vijaykumarktg18/how-does-javascript-engine-work-532b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)