[Computer Science] Hoisting
8520 ワード
ホストとは?
変数Hosting(var、let、const)
// 1번 코드
a = 2;
var a;
console.log(a); // ?
上のコードを実行するとどのような結果が得られますか?var a宣言により、変数が再定義され、デフォルト値undefinedが出力される可能性がありますが、このコードの実行結果は2です.
// 2번 코드
console.log(a); // ?
var a = 2;
上記のコード出力結果は2またはReferenceErrorではなく、定義されていません.これらの動作を観察するためには,3ステップ経過した変数の生成過程を検討する必要がある.
変数を作成する手順3
1)「宣言フェーズ」(Declaration Phase)
メモリに
関数宣言vs関数式
関数でも同様にオフセットが発生します.
関数fooの宣言には記号が付けられているので、最初の行でfooを呼び出すことができます.このとき、ホイストリンはスキャンモードで動作します.
foo();
function foo() {
console.log(a); // undefined
var a = 2;
}
// 위 코드의 실제 동작
function foo() {
var a;
console.log(a);
a = 2;
}
foo();
関数宣言はこのようにネストされていますが、関数式は異なります.foo(); // TypeError : foo is not a function
var foo = () => {
console.log(a);
var a = 2;
}
変数識別子fooはグローバルスキャンにネストされているため、foo()呼び出しは失敗せず、ReferenceErrorも発生しない.しかしfooにはまだ値がありませんが、foo()は未定義の値を呼び出しようとし、TypeErrorというエラーが発生しました.📌 関数と変数宣言は反発しますが、まず反発関数宣言を行い、次に反発変数宣言を行うのが特徴です.
foo(); // 1
var foo;
function foo() {
console.log(1);
}
foo = () => {
console.log(2);
}
JAvascriptエンジンは、上記のコードを次のように説明します.function foo() {
console.log(1);
}
foo();
foo = () => {
console.log(2);
}
Reference
注意:Hosting–用語辞典|MDN
注意:let, const | PoiemaWeb
Reference
この問題について([Computer Science] Hoisting), 我々は、より多くの情報をここで見つけました https://velog.io/@ki5970/Computer-Science-Hoistingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol