[実行コンテキスト(Execution Context)]
8864 ワード
実行コンテキスト
JavaScriptコードを実行する環境または計算範囲を表す抽象領域.
実行コンテキストはよく書かれているだけで,開発者が作成したコード実行環境を構成するコンテナである.
簡単に言えば、これは私たちが卵を焼くために、ガスコンロやフライパンが必要なように、コードを実行するために宣言した設定変数と関数を実行し、実行する概念です.
JavaScriptランタイムエンジンがheapとstack領域で構成されていることは以前から知られていました.では、スタック上で実行されるコードがどのような構成でマウントされているかを見てみましょう.
コンテキスト分類の実行
開発では,ある概念が存在するとよく分類される.だから疲れた...実行コンテキストは、2つのクラスに分けることもできます.
1.グローバル実行コンテキスト
実行時にエンジンがコードを実行すると、グローバル実行コンテキスト領域が生成されます.作成中にグローバルオブジェクトWindow Objectが作成されます.
2.関数実行コンテキスト
JavaScriptコードとして宣言された関数を呼び出すたびに、関数のみを呼び出す実行コンテキストが生成されます.
ランタイムエンジンは、コードを実行するときに最初にグローバル実行コンテキスト領域を作成し、関数を呼び出すたびに関数専用の機能実行コンテキストを作成します.
コンテキスト構造の実行
コールスタック実行プロセス
Call Stackで実行コンテキストをスタックし、コードを実行します.
餅串で例えると簡単です.軽食店のおばさんが餅串を作るときは、下から上へ順番に差し込みます.そして、私たちが無名の時、私たちは上から食べ始めます.この構造と同様に,LIFO(Last in,First out)構造を示した.
実行手順をコードと画像で説明します.次のコードはヨロコムを実行します.
// ES6
const first = () => {
console.log('first')
second();
}
const second = () => {
console.log('second');
}
first();
// first
// second
このようなコードがあると仮定します.first
関数では、second
を呼び出す構造が現れる.内部では、最初にグローバル実行コンテキストを作成し、各関数に実行コンテキストを作成します.CallStackに積み上げた時はPUSH、クリアした時はPOPです.手順1:コード実行前にグローバル実行コンテキストとPUSHを作成する
ステップ2:
first
関数呼び出し(
first
関数の機能実行コンテキストとPUSHを作成)ステップ3:
first
関数内部呼び出しconsole.log('first')
(console.log
関数の機能実行コンテキストとPUSHを作成)ステップ4:
console.log(‘first’)
終了(
console.log
関数機能実行コンテキストPOP)呼び出し手順5:
second
関数(
second
関数の機能実行コンテキストとPUSHを作成)ステップ6:
second
関数でconsole.log('second')
を呼び出す(
console.log
関数の機能実行コンテキストとPUSHを作成)ステップ7:
console.log(‘second’)
終了(
console.log
関数機能実行コンテキストPOP)ステップ8:
second
関数終了(
second
関数機能実行コンテキストPOP)ステップ9:
first
関数終了(
first
関数機能実行コンテキストPOP)ステップ10:実行終了後グローバル実行コンテキストPOP
first
には、console.log
関数およびsecond
関数呼び出しコードがある.console.log
関数はログのみを撮るやつなので、最後のデップです.console.log
関数コンテキストを実行すると、second
関数実行コンテキストが生成され、内部でもconsole.log('second')
が呼び出されるため、console.log
の実行コンテキストが生成され、コードが実行されます.コンテキスト作成プロセスの実行
実行コンテキストの作成は、ステップの作成と実行によって組織されます.
作成フェーズ
すべての実行コンテキストを作成するには、create>executeの手順に従います.生成フェーズと生成フェーズを区別するために、生成フェーズをcreateと名付けます.この段階を経ると、このオブジェクトが生成され、エスケープされます.また,実行コンテキストがグローバルであるか関数であるかでは,グローバルオブジェクト,パラメータなどの生成因子の違いがある.
1.グローバル実行コンテキスト
グローバル実行コンテキストでは、次のcreateステップが実行されます.
var name = 'carrots';
var age = 29;
function getUserInfo() {
return {
name: name,
age: age
}
}
// 생성 단계 결과
Global Execution context : {
Window : Global Object,
this : Window,
name : undefined,
age : undefined,
getUserInfo : function object
}
// 실행 단계 결과
Global Execution context : {
Window : Global Object,
this : Window,
name : 'carrots',
age : 29,
getUserInfo : function object
}
2.関数実行コンテキスト
関数実行コンテキストもcreate、executeステップで作成されます.
var name = 'carrots';
var age = 29;
function getUserInfo(param) {
var sex = '상남자';
return {
name: name,
age: age
}
}
getUserInfo(1); // 실행 컨텍스트 생성
// 생성 단계 결과
Function Execution context : {
argument : { 0 : 1, length : 1 }
this : Window
param : 1,
sex : undefined
}
// 실행 단계 결과
Global Execution context : {
argument : { 0 : 1, length : 1 }
this : Window
param : 1,
sex : '상남자'
}
整理する
JavaScriptの実行単位コンテキストのタイプと内部構造について理解しました.もち串を想像してみましょう
今晩は餅串を食べます.🥕
関連項目:https://medium.com/sjk5766/call-stack%EA%B3%BC-execution-context-%EB%A5%BC-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-3c877072db79
Reference
この問題について([実行コンテキスト(Execution Context)]), 我々は、より多くの情報をここで見つけました https://velog.io/@carrotsman91/실행-컨텍스트-Execution-Contextテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol