[JS] execution context 'this'
実行コンテキスト(実行コンテキスト) function a(){
let youAreIn = 'A Scope';
b();
}
function b(){
let youAreIn = 'B Scope';
c();
}
function c(){
let youAreIn = 'C Scope';
debugger;
}
a();
// execution context 4개(A, B, C, 글로벌영역)생긴다.
// b는 a에서 호출됐고, c는 b에서 호출됐고, a는 전역에서 호출됐다.
function a(){
let youAreIn = 'A Scope';
b();
}
function b(){
let youAreIn = 'B Scope';
c();
}
function c(){
let youAreIn = 'C Scope';
debugger;
}
a();
// execution context 4개(A, B, C, 글로벌영역)생긴다.
// b는 a에서 호출됐고, c는 b에서 호출됐고, a는 전역에서 호출됐다.
簡単に言えば「メモリテーブル」
execution contextはblockではなく関数単位で生成されます.
各functionscopeにはメモリテーブルがあります.
実行時に生成されます(関数を呼び出すとexecution contextが作成されます).
ここに入っている
-scopeの変数と関数(local、global)
-伝達パラメータ(arguments)
-呼び出し元(呼び出し元)
- this
'this' keyword
すべての関数scope内で自動的に設定される特殊な識別子.
execution contextのコンポーネントで、関数の実行時に使用できます.
5 patterns of binding 'this'
(暗唱!)
1 & 2. Global & function invocation
3.メソッドを呼び出すとき、これは親オブジェクトです。
関数呼び出しとメソッド呼び出しの違い:メソッドとは、オブジェクトに含まれる関数を指します.let obj = {
foo: function(){console.log(this);}
}
obj.foo() // method 호출, {foo: f} obj
let obj2 = {
hello: {
fn: function(){console.log(this);}
}
}
obj2.hello.fn() // {fn: f}, hello만 나온다, 딱 자기 부모만 가져온다
let obj3 = {
hello: {
fn: function(){console.log(this);}
},
foo: function(){console.log(this);}
}
obj3.foo();// ojb3다 가져온다, 바로 직계 부모만 가져온다
4.Construction mode(新しい演算子によって形成された関数領域のthis):新しく作成されたオブジェクト
constructor:インスタンスの初期化時に実行されるコンストラクション関数
これを例として
newキーワードで作成するのが私たちの通常の構築モデルだという人もいます.
このときinstanceがあって、その時のthisはvante、instanceになりました.
5. .call or .apply呼び出し:call、applyの最初のパラメータとして指定されたオブジェクト
関数の実行方法1. foo() // function invocation
2. window.foo() // method invocation
3. new foo() // construction mode
4. foo.call()
5. foo.apply()
.call
.apply
Math.max(2,3,5,1,10,14) // 14
let arr = [10, 3,5,7,1,23]
Math.max.apply(null, arr) //23
Reference
この問題について([JS] execution context 'this'), 我々は、より多くの情報をここで見つけました
https://velog.io/@rememberme_jhk/JS-execution-context-this
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
let obj = {
foo: function(){console.log(this);}
}
obj.foo() // method 호출, {foo: f} obj
let obj2 = {
hello: {
fn: function(){console.log(this);}
}
}
obj2.hello.fn() // {fn: f}, hello만 나온다, 딱 자기 부모만 가져온다
let obj3 = {
hello: {
fn: function(){console.log(this);}
},
foo: function(){console.log(this);}
}
obj3.foo();// ojb3다 가져온다, 바로 직계 부모만 가져온다
1. foo() // function invocation
2. window.foo() // method invocation
3. new foo() // construction mode
4. foo.call()
5. foo.apply()
Math.max(2,3,5,1,10,14) // 14
let arr = [10, 3,5,7,1,23]
Math.max.apply(null, arr) //23
Reference
この問題について([JS] execution context 'this'), 我々は、より多くの情報をここで見つけました https://velog.io/@rememberme_jhk/JS-execution-context-thisテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol