2011-07-21 9 views
0

私は次のようにします。この関数のスタックはどのように見えますか?

function makeAddFunction(amount) { 
    function add(number) { 
    return number + amount; 
    } 
    return add; 
} 

var addTwo = makeAddFunction(2); 
var addFive = makeAddFunction(5); 
alert(addTwo(1) + addFive(1)); 

makeAddFunctionの各インスタンスが別々のスタックを持っているのでしょうか、それらのすべてが同じスタックを使うのでしょうか?スタックに入ったり出る変数の順序は重要ですか?

+0

'makeAddFunction'のインスタンスは1つだけです。あなたはそれにそれぞれの呼び出しを意味するのですか? – sje397

+0

@ sje397これらは2つの異なるインスタンスではありませんか?どのようにして同じ変数の2つの異なる値を保持できますか? – ilyo

+1

'add'と呼ばれる関数の2つのインスタンスがあり、' makeAddFunction'の1つのインスタンスへの呼び出しから返されます。変数はそれらの参照を格納します。 – sje397

答えて

2

各関数呼び出しは、新しいFunction(-Context)を作成します。それですぐに答えるために、彼らはECMAスクリプトの点で別々の "スタック"を持っていますExecution Contexts

"スタックに入る変数と変数から出る順序"の意味がわかりません。

ECMAscriptはすべてコンテキスト(オブジェクト)に関するものです。順序で呼び出される実行コンテキストのスタックがあります。 1つのコンテキストが終了すると、親コンテキストは終了するまで実行されます(など)。その原則は、文脈が存在しない限り続くので、Global contextが再び注目を集める。

関連する問題