2016-10-28 8 views
0

私は5年間プログラミングしていますが、何か不思議に思っています。このコード例では、関数から値を返し、変数を格納します。これはどのような順序で起こりますか?言語が解釈されるかコンパイルされるかは重要ですか?JavaScriptの戻り値

function foo() { 
    return "junk"; 
} 

var bar = foo(); 

私はbar = "junk"を知っています。これはどのような順序で行われますか?私は関数が呼び出されたときにそれを呼び出す関数に制御を戻し、プログラムが中断したところから再開することを知っています。つまり、 'var bar ='に戻ってくるのでしょうか?

動的に型指定された言語で、バーはどのように最初に作成されますか?それはヒープ上に作成されていますか?

+0

時系列的に発生します –

+0

[有用なビデオ](https://youtu.be/QyUFheng6J0?t=6m47s) – nem035

答えて

1

javascriptのすべての関数呼び出しは、フレームのスタックとして実行されます。

あなたのケースでは、 "foo"呼び出しが発生すると、 "foo"関数呼び出し全体のスタックフレームが作成され、そのフレームにはすべてのfooの変数とその情報が含まれます。

fooで別の関数が呼び出された場合、その関数用に別のスタックフレームが作成されます。

あなたはスタックの動作が正しいことを知っています。最後のものが最初に出てきます。ここでfoo(存在する場合)の中の関数が最初に実行され、スタックから抜け出します。次のターンは "foo"です。

"foo"が実行され、スタックから出てきて、今度は変数が来ます(あなたの場合は "bar"です)。