3

javascript での変数の巻き上げに関する次の記事に出くわしました。この記事では、次の 3 点をまとめています。

1. All declarations, both functions and variables, are hoisted to the top of the containing scope, before any part of your code is executed.
2. Functions are hoisted first, and then variables.
3. Function declarations have priority over variable declarations, but not over variable assignments.

サイト ポイント

var showState = function() {
  console.log("Idle");
};

function showState() {
  console.log("Ready");
} 

showState(); 

コードがJavaScriptエンジンによって次のように解釈されることを理解しました

function showState() { // moved to the top (function declaration)
    console.log("Ready");
}

var showState; // moved to the top (variable declaration)
showState = function() { // left in place (variable assignment)
    console.log("Idle");
};

showState();

しかし、要約の 3 番目のポイントの意味がわかりませんでした。3番目のポイントを説明できる人はいますか? 3番目のポイントの意味は何ですか?

3 番目のポイントの説明によると、次のスニペットは 8、関数 bar() を返す必要があります。しかし、未定義、関数 bar() と表示されます。

console.log(foo);
console.log(bar);
var foo = 8;
function bar() {
    console.log("bar");
}
4

3 に答える 3

2

リンク先の記事から:

上記のコードでは、関数宣言が変数宣言よりも優先されることがわかりました。次の例では、関数宣言と変数代入がある場合、後者が優先されることがわかります。

var showState = function() {
  console.log("Idle");
};

function showState() {
  console.log("Ready");
} 

showState();            // output: Idle

関数宣言は次の 2 つのことを行います。

  1. 関数と同じ名前の変数を宣言します
  2. 関数をその変数に割り当てます

変数宣言だけでなく、これらの両方が巻き上げられます。var(これは、宣言のみが巻き上げられる割り当てが関連付けられているステートメントとは異なります)。

これは、= function() {コードが最初にあるにもかかわらず、の関数宣言が最初に実行されるため、= function() {上書きされる可能性があることを意味します。

于 2015-09-18T07:38:03.317 に答える
-1

基本的に - 順不同であるとしましょう

function hello(){};
var sup;
var yo = 4;

可変巻き上げでは、順序は次のようになります

    var yo = 4;
    function hello(){};
    var sup;

var の割り当ては関数よりも優先され、関数は関数宣言よりも優先されるためです。

于 2015-09-18T06:41:31.027 に答える