0

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

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

var val = 5;

increment(val); 

alert(val);

</script>
4

3 回答 3

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'); 
于 2013-02-22T10:09:57.847 回答
0

这是因为 Javascript 中的原始变量是按值传递的,而不是按引用传递的。

当传入像字符串或数字这样的原始类型变量时,值是按值传入的。这意味着在函数中对该变量的任何更改都与函数外部发生的任何事情完全分开

查看这个很棒的博客条目以获取有关此主题的更多信息:http: //snook.ca/archives/javascript/javascript_pass

于 2013-02-22T10:13:19.037 回答
0

您不需要传递全局变量。当您将参数传递给函数时,它会创建变量的本地副本。因此,如果您想从函数中影响全局变量,则在调用函数时不要传递它,因为无论如何您都可以访问全局变量,而无需传递。

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

var val = 5;

increment(); 

alert(val);

请注意,在定义increment()函数时,您已将参数指定为**val**. 所以在函数内部,每个引用val都是针对这个本地参数的。如果要访问实际的全局变量,请使用window.val.

于 2013-02-22T10:15:14.963 回答