MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-survey

ここへジャンプ:

この翻訳は不完全です。英語から この記事を翻訳 してください。

巻き上げ(Hoisting) は、ECMAScript® 2015 言語仕様より前には、どんな規範的な仕様書にもなかったものです。巻き上げは JavaScript の実行コンテキスト (特に作成と実行のフェーズで) では一般的な方法と考えられていました。しかし、巻き上げは誤解に繋がる可能性があります。例えば、巻き上げで変数と関数定義は物理的にコードの一番上に移動すると教えますが、これは実際に起こっていません。起きているのは変数と関数宣言は compile フェーズで記憶されますが、コーディングでタイプされた場所と変わりません。

詳細情報

技術的な例

One of the advantages of JavaScript putting function declarations into the memory before it executes any code segment is that it allows you to use a function before you declare it in your code. For example:

function catName(name) {
  console.log("My cat's name is " + name);
}

catName("Tigger");
/*
The result of the code above is: "My cat's name is Tigger"
*/

The above code snippet is how you would expect to write the code for it to work. Now, let's see what happens when we call the function before we write it:

catName("Chloe");

function catName(name) {
  console.log("My cat's name is " + name);
}
/*
The result of the code above is: "My cat's name is Chloe"
*/

Even though we call the function in our code first, before the function is written, the code still works. This is because of how context execution works in JavaScript.

Hoisting works well with other data types and variables as well. The variables can be initialized and used before declared. But they cannot be used without initialization.

技術的な例

num = 6;
num + 7;
var num; 
/* gives no errors as long as num is declared*/

JavaScript only hoists declarations, not initializations. If you are using a variable that is declared and initialized after using it, the value will be undefined. The below two examples demonstrate the same behavior.

var x = 1; // Initialize x
console.log(x + " " + y); // '1 undefined'
var y = 2; // Initialize y


// The following code will behave the same as the previous code: 
var x = 1; // Initialize x
var y; // Declare y
console.log(x + " " + y); // '1 undefined'
y = 2; // Initialize y

技術リファレンス

ドキュメントのタグと貢献者

 このページの貢献者: Uemmra3, chikoski, keioka, hurumeki
 最終更新者: Uemmra3,