この使い方について
8503 ワード
JavaScriptで関数を実行するか、ES 6を作成した後に表示されるブロック(
外部環境リファレンスは、現在の関数がどこで実行されているか、スクリプトがどこから作成されているかに関する情報を格納します.ネストされたオブジェクトであるか、関数で実行している関数が親プロセスにアクセスできるとします.これは、現在のステータスが外部環境参照に格納されているためです.
この章で検証する
関数の実行方法
{}
)は실행 컨텍스트
を生成し、実行コンテキストには1.Variable Enviroment
、2.Lexical Enviroment
、3.thisBinding
の情報が含まれます.1. Varialbe Enviroment
Variable Enviroment
はオブジェクトであり、2つの初期状態snap-shot
を含み、初期メキシコ環境状態を格納する.関数の実行時、スクリプトの実行時にPropertyとしてLexicalEnvironmentに格納されている値が変化する場合があります.そのため、初期状態を保存して変化を検出する必要がある場合があります.2. Lexical Enviroment
Lexical Enviroment
には、環境記録オブジェクトおよび外部環境参照に関する情報が格納されている.環境レコードには、その範囲内で宣言された識別子に関する情報が格納されます.これらの識別子に関する情報を取得するために、JavaScriptエンジンは、호이스팅
の概念を使用して、これらのタグを上から下まで1つずつ読み取り、宣言された識別子および関数を環境記録オブジェクトのpropertyとして格納する(ここで指定された値はまだ保存されていない).外部環境リファレンスは、現在の関数がどこで実行されているか、スクリプトがどこから作成されているかに関する情報を格納します.ネストされたオブジェクトであるか、関数で実行している関数が親プロセスにアクセスできるとします.これは、現在のステータスが外部環境参照に格納されているためです.
3. thisBinding
この章で検証する
this
の使用方法に関する情報と、現在thisが何を指しているかを格納します.もしそうであれば,thisを生成した場合の状況をより容易に理解できる.関数の実行方法
1.一般的な関数として実行
function func() {
console.log(this);
return ;
}
func(); // window
任意の関数として宣言されたfunc
がある場合、func()
によって関数が実行されると、その関数自体には何もありません.上で1つの関数を実行すると、実行コンテキストの作成時に複数の値が保存されますが、この関数を実行するだけであれば、this
の値はグローバルオブジェクトを参照します(window
).
2.メソッドで実行
メソッドは、객체명.함수명
として.
に接続されたオブジェクト内の関数を呼び出すことです.const obj = {
func() {
console.log(this);
return ;
},
sub: {
subFunc() {
console.log(this);
return ;
}
}
}
obj.func(); // (1) obj
obj.sub.subFunc(); // (2) sub
関数が.
で呼び出され、メソッドで呼び出される場合、this
の値は.
より前に作成されたオブジェクトを参照します.
上記のコードを調べた結果,(1)
の結果はobjオブジェクト,(2)
の結果はsubオブジェクトであることが分かった.
3. apply/call/bind
apply/call/bind
は、開発者が必要とするオブジェクトとして明示的に指定できる方法です.この値が明示的に指定されているため、この値による混乱を減らすことができます.あるいは、callback関数を使用して関数を渡す場合は、これらの方法を使用してこの値を覚えることができます.
4.new演算子-コンストラクション関数
function Person(name,age) {
this.name = name,
this.age = age,
// return 문이 없음을 유의
}
function PersonReturn(name, age) {
this.name = name,
this.age = age,
return {
name: "고릴라",
age: 13
}
}
const 영희 = new Person("영희", 23); // (1)
const 의섭 = new Person("의섭", 26); // (2)
const 고릴라 = new PersonReturn("원숭이", 31);
console.log(고릴라.name); // 고릴라
コンストラクション関数を使用してオブジェクトを作成する場合、この値は新しく作成したインスタンスを指します.つまり(1)
のthisは英姫を指し、(2)
のthisは義燮を指す.
コンストラクション関数を使用する場合は、return
文を記述しないことに注意してください.
コンストラクション関数はthis
(デフォルトでは新しく作成されたオブジェクトを参照)を返し、開発者が直接戻り文を作成した場合、this
は戻って無視されない場合があります.this
が無視された場合は、戻りゲートが객체 타입
に戻ったときである.return文で원시 타입
を返すと、そのreturnは無視されますが、객체 타입
を返すとthis
自体は無視されますので注意してください.
Reference
この問題について(この使い方について), 我々は、より多くの情報をここで見つけました
https://velog.io/@uiseop/this용법에-대해서
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
function func() {
console.log(this);
return ;
}
func(); // window
const obj = {
func() {
console.log(this);
return ;
},
sub: {
subFunc() {
console.log(this);
return ;
}
}
}
obj.func(); // (1) obj
obj.sub.subFunc(); // (2) sub
function Person(name,age) {
this.name = name,
this.age = age,
// return 문이 없음을 유의
}
function PersonReturn(name, age) {
this.name = name,
this.age = age,
return {
name: "고릴라",
age: 13
}
}
const 영희 = new Person("영희", 23); // (1)
const 의섭 = new Person("의섭", 26); // (2)
const 고릴라 = new PersonReturn("원숭이", 31);
console.log(고릴라.name); // 고릴라
Reference
この問題について(この使い方について), 我々は、より多くの情報をここで見つけました https://velog.io/@uiseop/this용법에-대해서テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol