2016-12-20 9 views
0
function a(){ 
    function b(){ 
    } 
} 

上記のjavascriptのコードでは、巻上げ段階では、機能bは吊り上げられますか?または、aは、関数aのみがグローバルコンテキストに字句的に存在するため、吊り上げられます。Javascript Hoistingについて混乱した

+0

を巻き上げのようになります。 'b'はホイストされますが、' a() 'が呼び出されるたびに関数スコープ内でのみ呼び出されます。 – Bergi

+0

これは、 'a()'を呼び出さなければ 'b'はホイストされません。 –

+0

'a()'を呼んでいないと 'b'がなくなり、複数回呼び出すと' b'が多くなります。 'b'のためには、スコープ' ... {function b(){}} ... 'のみを考慮する必要があります(これは 'a'関数本体です)。 – Bergi

答えて

3

bは、その機能(a)が呼び出されたときの巻上げフェーズの間に表示されるスコープの上部(機能aの本体によって定義されるスコープ)にホストされます。

bは、グローバルスコープにエクスポートされません。

+0

本当にありがとう、これは本当に明確なイラストです。 –

0

宣言は、包含スコープの先頭に持ち上げられます。これは、関数bが関数aです。

ファンクションbはファンクションaの先頭に持ち込まれますが、それはすでにそこにあります。

そして、a(あなたのコードに基づいて)関数は、グローバルスコープの上に吊り下げられます。

1

関数aはグローバルスコープの先頭に移動し(グローバルスコープでこれを仮定します)、関数bは関数aによって作成されたスコープの先頭に持ち上げられます。

0

ホイスト処理では、すべての宣言が親関数宣言の下に移動します。

Ex: function fun(){ 
    a = 10; 
    var c = b(); 
    function b(){} 
} 

は*範囲ごとに*常に起こる

function fun(){ 
var a; 
var c; 
function b(){}; 
a = 10; 
c = b(); 
} 
関連する問題