0

今日、奇妙な問題に遭遇しました。

良い点: 関数内からグローバル var 値を正常に変更できました (つまり、「passedVarName」が「a」に置き換えられた場合、以下の例は正常に機能します)。

悪い点: グローバル var 名 "a" を (関数に直接入れるのではなく) 渡そうとすると、うまくいきません。

以下は、私がうまくいかないように見えるものです:

(クリックするとドキュメントは「2」と書かれるべきですが、代わりに「NaN」と書かれますか?)

Javascript:

  var a = 1;

  function click(passedVarName){

     passedVarName ++;

     document.write(passedVarName)

  };

HTML:

<a href="javascript:click('a')">Click this Button to alter global var "a".</a>
4

4 に答える 4

2

これはかなり悪いコードの匂いですが、グローバルであることがわかっている場合は、次のように動作します。

var a = 1;

function click(passedVarName){

    window[passedVarName]++;

    document.write(passedVarName)

};
于 2012-04-20T05:47:16.960 に答える
1

このボタンをクリックして、グローバル変数「a」を変更します。

これにより、変数aではなく、文字列'a'が関数に渡されます。あなたはそれを次のように渡す必要がありますclick(a);

修正された例: http: //html-bin.appspot.com/aghodG1sLWJpbnIMCxIEUGFnZRjhjxoM

[javascriptとHTMLを分離して混乱を避けるためにjsfiddle.netを使用しませんでした]

于 2012-04-20T05:44:15.853 に答える
0

プログラミングの知識を誤解した場合はご容赦ください。ただし、グローバル変数はプログラミングのどの部分からでもアクセスおよび変更できるものであるため、変更するために関数に渡す必要はありません。

関数を介してグローバル変数を変更しようとしている場合、javascriptにはいくつかの制限があります。オブジェクトのみが参照によって渡されます。

var a = 5;
var b = { value: 5 };


function changeMe(x) {
   x = 10;
}
changeMe(a); //... still 5

function changeMeAlso(x) {
   x.value = 10;
}
changeMeAlso(b); //.. changed to { value: 10 }
于 2012-04-20T07:45:35.953 に答える
0

グローバル変数をパラメーターとして関数に渡すと、その変数のコピーが関数内に作成されます。グローバルは変わりません。

この例では、最初の div をクリックするたびに同じ出力が生成されます。

//html
<div onclick="foo(a)">Click here</div>
<div id="txt"></div>​​​​​​​​​​​​​
//js
window.a = 152;
window.foo = function(varr) {varr++; $("#txt").html(varr)}​

ただし、変数をオブジェクトのプロパティとして渡し、そのオブジェクトを関数に渡し、関数内で変数を変更すると、グローバルな効果があるようです:

//html
<div onclick="foo(a)">Click here</div>
<div id="txt"></div>​​​​​​​​​​​​​​​​
//js
window.a = { val:152};
window.foo = function(varr) {varr.val++; $("#txt").html(varr.val)}​

これが機能するjsFiddleです:http://jsfiddle.net/2Ahdb/3/

于 2012-04-20T06:03:48.740 に答える