32

または、私が必要とするものにより具体的に:

別の関数内から関数を呼び出す場合、呼び出し元の関数内から、または上のレベルから変数をプルしますか? 元:

myVar=0;

function runMe(){
    myVar = 10;
    callMe();
}

function callMe(){
   addMe = myVar+10;
}

callMe() が runMe() を介して呼び出された場合、myVar は最終的に何になりますか?

4

7 に答える 7

5

次の行がcallMe();の場合 の場合、addMe は 10 になり、myVar は 0 になります。

次の行がrunMe();の場合 の場合、addMe は 20 になり、myVar は 10 になります。

質問してすみません-これは静的/動的バインディングと何の関係がありますか? myVar は単なるグローバル変数ではなく、手続き型コード (すべてをコール スタックにアンラップする) によって値が決定されるのではないでしょうか?

于 2009-06-06T04:21:49.913 に答える
1

キーワードvarを使用して変数を定義しない限り、すべてがオブジェクトのプロパティになりwindowます。したがって、コードは次のようになります。

window.myVar=0;

function runMe(){
    window.myVar = 10;
    window.callMe();
}

function callMe(){
   window.addMe = window.myVar+10;
}

これを念頭に置いておくと、何が起こっているのかを常に明確にする必要があります。

于 2011-06-20T12:54:02.540 に答える
0
myVar=0;

function runMe(){
    myVar = 10;
    callMe();
}

function callMe(){
   addMe = myVar+10;
}

出力に関する限り、この場合、myVar と addMe は両方ともグローバル変数になります。javascript のように、変数を var で宣言しないと暗黙的にグローバルとして宣言されるため、runMe() を呼び出すと、myVar は次のようになります。値 10 と addMe は 20 になります。

于 2017-07-01T21:54:13.703 に答える