为什么在调用函数增加它之后全局变量保持不变?
问题描述:
调用递增函数后,为什么全局变量仍然是5?预先感谢您的帮助。为什么在调用函数增加它之后全局变量保持不变?
<script>
function increment(val) {
val+=1;
}
var val = 5;
increment(val);
alert(val);
</script>
答
function increment(val) {
val+=1;
}
声明一个变量val
您的本地功能。你改变你的局部变量而不是外部变量。这是相同的
function increment(val2) {
val2+=1;
}
你可以这样做:
function increment(val) {
return val+1;
}
var val=5;
val = increment(val);
或
function increment(holder, varname) {
holder[varname] = holder[varname]+1;
}
var val=5;
increment(window, 'val');
答
这是因为在Javascript原始变量是按值传递,而不是参考。
当传入像字符串或数字这样的基本类型变量时,该值通过值传入。这意味着,在函数的任何变化到 变量,而从任何 的功能外发生
检查该主题的更多信息这个伟大的博客条目完全独立: http://snook.ca/archives/javascript/javascript_pass
答
你不不需要通过全球变数。 当您将参数传递给函数时,它会创建一个valriable的本地副本。所以,如果你想从函数中实现全局变量,那么在调用函数时不要传递它,因为无论如何都可以访问全局变量,而无需传递。
<script>
function increment() {
val+=1;
}
var val = 5;
increment();
alert(val);
注意,当您正在定义的increment()
功能您所指定的参数作为**val**
。因此在函数内部,对val
的每个引用都是针对这个本地参数的。如果要访问实际全局变量,请使用window.val
。
这是一个全局变量,所以不传递任何东西,直接在函数内部使用全局也是一个选项。 – 2013-02-22 10:11:42
@AnthonyGrist是的,但我想这个功能没有任何意义,所以我没有提出这个建议。 – 2013-02-22 10:13:31