将全局变量的名称传递给更改变量的函数
Pass name of global var to function that alters var?
我今天遇到了一个奇怪的问题。
好处:我成功地从函数中更改了全局变量值(换句话说,当"passedVarName"替换为"a"时,下面的示例工作正常)。
坏处:当尝试传递全局变量名称"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>
这是一个非常糟糕的代码气味,但如果你知道它是全局的,那么这将起作用:
var a = 1;
function click(passedVarName){
window[passedVarName]++;
document.write(passedVarName)
};
单击此按钮可更改全局变量 "a"。
这会将字符串"a"传递给您的函数,而不是变量 a。您需要将其作为click(a);
传递
更正的示例:http://html-bin.appspot.com/aghodG1sLWJpbnIMCxIEUGFnZRjhjxoM
[ 没有使用 jsfiddle.net 来避免混淆 通过分离 javascript 和 HTML ]
将全局变量作为参数传递给函数会在函数中创建该变量的副本。全局不会改变。
此示例将在每次单击第一个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/
如果我
误解了您的编程知识,请原谅我,但是全局变量是可以被编程的任何部分访问和修改的东西,您无需通过函数传递它即可对其进行修改。
如果你尝试通过函数修改全局变量,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 }
相关文章:
- IF 语句不改变变量的结果
- 为什么不是'这个CanvasJS脚本动态地改变变量
- 在php中改变变量,但在javascript中相同的变量不变
- 为什么Javascript不使用onChange来改变变量?
- 添加一个DOM/SVG元素与d3 javascript库改变变量引用/范围,为什么
- 通过点击按钮改变变量的值
- 在按下键后改变变量
- JQuery改变变量/成本后点击
- Eventlistener点击不改变变量时按下
- 改变变量中的链接
- 不能让函数改变变量
- Javascript滑块动态改变变量
- 通过html按钮改变变量
- Jquery在点击时改变变量
- 不能改变变量
- 为什么我的精灵在不改变变量的情况下加速
- 在javascript的文字函数中改变变量的值
- jQuery用子元素改变变量
- 改变变量&设置日期反应原生
- Ajax文件检查成功后不改变变量