または、私が必要とするものにより具体的に:
別の関数内から関数を呼び出す場合、呼び出し元の関数内から、または上のレベルから変数をプルしますか? 元:
myVar=0;
function runMe(){
myVar = 10;
callMe();
}
function callMe(){
addMe = myVar+10;
}
callMe() が runMe() を介して呼び出された場合、myVar は最終的に何になりますか?
または、私が必要とするものにより具体的に:
別の関数内から関数を呼び出す場合、呼び出し元の関数内から、または上のレベルから変数をプルしますか? 元:
myVar=0;
function runMe(){
myVar = 10;
callMe();
}
function callMe(){
addMe = myVar+10;
}
callMe() が runMe() を介して呼び出された場合、myVar は最終的に何になりますか?
次の行がcallMe();の場合 の場合、addMe は 10 になり、myVar は 0 になります。
次の行がrunMe();の場合 の場合、addMe は 20 になり、myVar は 10 になります。
質問してすみません-これは静的/動的バインディングと何の関係がありますか? myVar は単なるグローバル変数ではなく、手続き型コード (すべてをコール スタックにアンラップする) によって値が決定されるのではないでしょうか?
キーワードvar
を使用して変数を定義しない限り、すべてがオブジェクトのプロパティになりwindow
ます。したがって、コードは次のようになります。
window.myVar=0;
function runMe(){
window.myVar = 10;
window.callMe();
}
function callMe(){
window.addMe = window.myVar+10;
}
これを念頭に置いておくと、何が起こっているのかを常に明確にする必要があります。
myVar=0;
function runMe(){
myVar = 10;
callMe();
}
function callMe(){
addMe = myVar+10;
}
出力に関する限り、この場合、myVar と addMe は両方ともグローバル変数になります。javascript のように、変数を var で宣言しないと暗黙的にグローバルとして宣言されるため、runMe() を呼び出すと、myVar は次のようになります。値 10 と addMe は 20 になります。