Execution context
4514 ワード
実行コンテキストはscope、hilling、this、function、closureなどの動作原理を含むJavaScriptの核心原理...より簡単に言えば、実行コンテキストは、実行可能なコードを実行するために必要な環境である.
デフォルトでは、JavaScriptコードの起動時に起動するコンテキスト
GlobalではJavaScript実行時の実行環境といえる
無条件に1つしか存在しません!(JavaScriptはシングルスレッド)
実行コンテキストは基本的に関数単位で生成されます.各関数にJavaScriptがあります
scopeを所有し、ドメインscopurと呼ばれます.
Functional execution contextは、関数が呼び出され、実行中の関数に対して生成されるexecution contextであり、関数内部のthisおよび領域変数を含む.
李慶宇は極めて珍しいので、すぐに処理しません.
作成フェーズも3つのフェーズを経験
ここで両者の意味はほぼ同じであるが,Activation objectは特殊な可変オブジェクトといえる.
「可変オブジェクト」(Variable Objects)-通常の関数に対して作成される変数オブジェクト.
Activation object-グローバル領域のグローバル実行コンテキストに対応するオブジェクト
有効領域はチェーンのように配列に含まれ、scopeの最も近いscopeから始まり、その前の
scopeの一番上のglobalcoscopeもチェーンのようにつながっているのでscope chainと呼ばれています
コードを再スキャンし、未定義の値を入力する(bへの割り当てを実行する)
呼び出しcFunc値(18行目)
18行目cFunc();JavaScriptエンジンがグローバル領域で発生した場合
呼び出し後、新しいFunctional Execution Contextが作成されます.
宣言された値として指定し、キーワードが宣言されていないaをキー値とし、dFunc();と触れ合う
また、新しいFunctional Execution contextを作成します!顔にどんな友達がいるかしか覚えていません はその友达に名前をつけて、情報がなければ、上の概念を探して彼らを探します.
宣言、割当宣言および割当がない場合は、スキャンチェーンを使用して親スキャンを表示し、ない場合はグローバルスキャンを表示します....まだ明確な概念はありませんが、このように整理するとcontextに対する理解が曖昧になります!
JavaScriptエンジンがコードをどのように解釈し、実行しているのかを深く知りたいのですが...!
1. Global excution context
デフォルトでは、JavaScriptコードの起動時に起動するコンテキスト
GlobalではJavaScript実行時の実行環境といえる
無条件に1つしか存在しません!(JavaScriptはシングルスレッド)
2. Functional execution context
実行コンテキストは基本的に関数単位で生成されます.各関数にJavaScriptがあります
scopeを所有し、ドメインscopurと呼ばれます.
Functional execution contextは、関数が呼び出され、実行中の関数に対して生成されるexecution contextであり、関数内部のthisおよび領域変数を含む.
3. Eval
李慶宇は極めて珍しいので、すぐに処理しません.
var a = 10;
fuction functionA {
console.log("start function A");
function functionB(){
console.log("In function B");
}
functionB();
}
functionA();
Executionコンテキストの簡単な表示
より詳細なプロセス
1.作成フェーズ(作成フェーズ)
2.実行フェーズ(実行フェーズ)
Creation phase
作成フェーズも3つのフェーズを経験
1.Activationオブジェクトまたは可変オブジェクトの作成
ここで両者の意味はほぼ同じであるが,Activation objectは特殊な可変オブジェクトといえる.
「可変オブジェクト」(Variable Objects)-通常の関数に対して作成される変数オブジェクト.
Activation object-グローバル領域のグローバル実行コンテキストに対応するオブジェクト
2.スコープチェーンの作成(スコープ変数に作用する有効領域)
有効領域はチェーンのように配列に含まれ、scopeの最も近いscopeから始まり、その前の
scopeの一番上のglobalcoscopeもチェーンのようにつながっているのでscope chainと呼ばれています
3.Determine the value of this(この値を決定)
コードを見て理解しましょう。
a = 1; // 변수선원 키워드 var, let, const이 없어 자바스크립트 엔진이 a를 변수로 등록하지 않는다
Variable object이 안되고 Activation object로 글로벌 변수로 분류 되는 것 같다
var b = 2; // Variable object이 된다 그러나 값은 undefined 왜냐? 지금 phase는
creation phase이기 때문!
cFunc = function(e){ // 변수 선언 키워드가 없다 그러나 함수가 선언되고 할당되었다는 이유만으로 이 함수의 주소가 포인터 값으로 힙메모리 어디에 저장이 되고 cFunc라는 변수에 할당해줌 cFunc는 아직 함수안의 내용은 모르고 주소값만 알고 있는 상태
var c = 10;
var d = 15;
a = 3; // 이렇게 선언 키워드없이 선언하면 creation phase에선 아무 변화가 없다
function dFunc(){
var f = 5;
}
dFunc(10);
}
cFunc();// 여길 만나면 글로벌 위에 추가로 excution context가 생성된다
ここまで進むと、以下のglobal execution contextが生成される globaEexcutionContext = {
activationObj: { //variable Obj
argumentObj : { //argumentObj는 뭘까? 함수는 argument를 받는다
물론 받지 않는 다면 length가 0으로 표현되고 그러나 global영역은 함수가 아니다
그래서 length가 0
length : 0
},
b : undefined, // var b = 2; Variable object // 아직 create phase이기 때문에 undefined // Execution phase에서 이값이 채워진다
cFunc: Pointer to the fuction definition // 포인터가 할당되어 있고
포인터는 이 함수가 힙메모리 어딘가에 저장되어있는 주소를 가리킴(주소값)
}
scopeChain: [Global execution context variable object],
this: value of this
}
これから実行段階に入り、JavaScriptエンジンコードを再スキャンし、未定義の値を入力する(bへの割り当てを実行する)
呼び出しcFunc値(18行目)
18行目cFunc();JavaScriptエンジンがグローバル領域で発生した場合
呼び出し後、新しいFunctional Execution Contextが作成されます.
cFuncExcutionContextObj = {
activationObj: {
argumentObj: {
0 : e, // cFunc의 argument //1개밖에 없어서 0! 2개면 1!
length : 1 // argument 개수 1개
},
e: 10, // 10을 인자로 호출됨 // 변수아님
c: undefined, // Creation phase 지역변수들은
d: undefined, // Creation phase 변수들의 이름만 선언됨
dFunc : Pointer to the function definition // 선언한 함수는 포인터라는 주소로 힙메모리에 저장
}
scopeChain : [cFunc variable object, Global execution context variable object] // cFunc가 가지고 있는 scope영역 // 그리고 바로 밖에 있는 상위 global scope
스코프 체인이 array형태로 만들어짐
this : value of this
}
次に、作成フェーズでExecutionフェーズに再度移動し、定義されていない値を宣言された値として指定し、キーワードが宣言されていないaをキー値とし、dFunc();と触れ合う
また、新しいFunctional Execution contextを作成します!
cFuncExcutionContextObj = {
activationObj: {
argumentObj : {
0 :e,
length : 1
},
e : 10,
c : 10,
d : 15,
dFunc : Pointer to the function definition,
// a = 3이라고 선언해준 값이없다
},
scopeChain : [cFunc variable object, Grobal execution context variable object], // a = 3; 이라는 정보가 없으니 scope를 탐색하기 시작한다 없으면 계속 상위로 넘어가서 탐색한다 계속 없으면 글로벌까지가서도 없으면 activationObj 면 해당 variable(a = 3)을 추가 해줘라라고 명령한다
this : value of this
}
宣言、割当宣言および割当がない場合は、スキャンチェーンを使用して親スキャンを表示し、ない場合はグローバルスキャンを表示します....まだ明確な概念はありませんが、このように整理するとcontextに対する理解が曖昧になります!
JavaScriptエンジンがコードをどのように解釈し、実行しているのかを深く知りたいのですが...!
Reference
この問題について(Execution context), 我々は、より多くの情報をここで見つけました https://velog.io/@dbfudgudals/Execution-contextテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol