将全局变量的名称传递给改变var的函数?

时间:2012-04-20 05:35:09

标签: javascript

我今天遇到了一个奇怪的问题。

好处:我成功地在函数中更改了一个全局变量值(换句话说,当“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 个答案:

答案 0 :(得分:2)

这是一个非常糟糕的Code Smell,但是如果你知道它是全局的,那么这将起作用:

var a = 1;

function click(passedVarName){

    window[passedVarName]++;

    document.write(passedVarName)

};

答案 1 :(得分:1)

单击此按钮可更改全局变量“a”。

这会将字符串'a'传递给您的函数,而不是变量a。 您需要将其作为click(a);

传递

更正示例: http://html-bin.appspot.com/aghodG1sLWJpbnIMCxIEUGFnZRjhjxoM

[未使用jsfiddle.net通过分离javascript和HTML来避免混淆]

答案 2 :(得分:0)

将全局变量作为参数传递给函数会在函数内创建该var的副本。全球并没有改变。

每次单击第一个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/

答案 3 :(得分: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 }