理解[JS]護送-基本編
4799 ワード
建設現場の周りを通ると、このような奇妙なエレベーターが見えやすい.
建設現場では、このエレベーターはハウスと呼ばれていますが、JavaScriptのハウスの概念はこれと似ています.
HoistingはJavaScriptで起こった変な(?)これは現象の一つです.
シースを初めて学ぶと、変数と関数宣言が物理的にコードの上部に移動し、動作することを理解します.
しかし、これは誤った概念です.
MDNの公式文書には、次の状況が記載されています.
変数と関数宣言は、コンパイルフェーズのメモリに格納されますが、コードに入力された場所と完全に一致します.
// 1
function catName(name) {
console.log("My cat's name is " + name);
}
catName("Tigger");
/*
위 코드의 결과는: "My cat's name is Tigger"
*/
// 2
catName("Chloe");
function catName(name) {
console.log("My cat's name is " + name);
}
/*
위 코드의 결과는: "My cat's name is Chloe"
*/
第2の例では、関数のエスケープが発生する.関数を宣言する前に、関数を実行してエラーが発生する可能性があります.
関数実行コードを実行する前に、関数宣言をメモリに保存するので、エラーは発生しません.
num = 6;
num + 7;
var num;
/* num이 선언되지 않더라도 에러를 내지 않습니다 */
var x = 1; // x 초기화
console.log(x + " " + y); // '1 undefined'
var y = 2;
// 아래 코드는 이전 코드와 같은 방식으로 동작합니다.
var x = 1; // Initialize x
var y; // Declare y
console.log(x + " " + y); // '1 undefined'
y = 2; // Initialize y
変数内の位置付けでは、変数を宣言する前に、初期化せずに使用できます.
変数では,初期化を行うかどうかが重要であるようである.
初期化はよく理解できないが,例では変数を用いた実行点(コンテキスト)に関連していると考えられる.
Reference
この問題について(理解[JS]護送-基本編), 我々は、より多くの情報をここで見つけました https://velog.io/@zero_mountain/JS-호이스팅-이해하기-기본편テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol