function a(){
function b(){
}
}
上記のjavascriptのコードでは、巻上げ段階では、機能b
は吊り上げられますか?または、a
は、関数a
のみがグローバルコンテキストに字句的に存在するため、吊り上げられます。Javascript Hoistingについて混乱した
function a(){
function b(){
}
}
上記のjavascriptのコードでは、巻上げ段階では、機能b
は吊り上げられますか?または、a
は、関数a
のみがグローバルコンテキストに字句的に存在するため、吊り上げられます。Javascript Hoistingについて混乱した
b
は、その機能(a
)が呼び出されたときの巻上げフェーズの間に表示されるスコープの上部(機能a
の本体によって定義されるスコープ)にホストされます。
b
は、グローバルスコープにエクスポートされません。
本当にありがとう、これは本当に明確なイラストです。 –
宣言は、包含スコープの先頭に持ち上げられます。これは、関数b
が関数a
です。
ファンクションb
はファンクションa
の先頭に持ち込まれますが、それはすでにそこにあります。
そして、a
(あなたのコードに基づいて)関数は、グローバルスコープの上に吊り下げられます。
関数aはグローバルスコープの先頭に移動し(グローバルスコープでこれを仮定します)、関数bは関数aによって作成されたスコープの先頭に持ち上げられます。
ホイスト処理では、すべての宣言が親関数宣言の下に移動します。
Ex: function fun(){
a = 10;
var c = b();
function b(){}
}
は*範囲ごとに*常に起こる
function fun(){
var a;
var c;
function b(){};
a = 10;
c = b();
}
を巻き上げのようになります。 'b'はホイストされますが、' a() 'が呼び出されるたびに関数スコープ内でのみ呼び出されます。 – Bergi
これは、 'a()'を呼び出さなければ 'b'はホイストされません。 –
'a()'を呼んでいないと 'b'がなくなり、複数回呼び出すと' b'が多くなります。 'b'のためには、スコープ' ... {function b(){}} ... 'のみを考慮する必要があります(これは 'a'関数本体です)。 – Bergi