调用递增函数后,为什么全局变量仍为5?提前感谢您的帮助。
<script>
function increment(val) {
val+=1;
}
var val = 5;
increment(val);
alert(val);
</script>
答案 0 :(得分:3)
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');
答案 1 :(得分:0)
这是因为Javascript中的原始变量按值传递,而不是通过引用传递。
传入字符串或数字等基本类型变量时, 值按值传递。这意味着任何改变 函数中的变量与任何东西完全分开 这发生在函数之外
查看这篇精彩的博客文章,了解有关此主题的更多信息: http://snook.ca/archives/javascript/javascript_pass
答案 2 :(得分:0)
您无需传递全局变量。 将参数传递给函数时,它会创建一个可变的本地副本。因此,如果要从函数中生成全局变量,则在调用函数时不要传递它,因为无论如何都可以访问全局变量而不传递。
<script>
function increment() {
val+=1;
}
var val = 5;
increment();
alert(val);
请注意,在定义increment()
函数时,您已将参数指定为**val**
。因此,在函数内部,对val
的每个引用都是针对此局部参数的。如果要访问所有全局变量,请使用window.val
。