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

问题描述:

调用递增函数后,为什么全局变量仍然是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'); 
+0

这是一个全局变量,所以不传递任何东西,直接在函数内部使用全局也是一个选项。 – 2013-02-22 10:11:42

+0

@AnthonyGrist是的,但我想这个功能没有任何意义,所以我没有提出这个建议。 – 2013-02-22 10:13:31

这是因为在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