调用函数增加后,为什么全局变量保持不变?

时间:2013-02-22 10:08:53

标签: javascript

调用递增函数后,为什么全局变量仍为5?提前感谢您的帮助。

<script>
function increment(val) {
  val+=1;
}

var val = 5;

increment(val); 

alert(val);

</script>

3 个答案:

答案 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