調用遞增函數後,爲什麼全局變量仍然是5?預先感謝您的幫助。爲什麼在調用函數增加它之後全局變量保持不變?
<script>
function increment(val) {
val+=1;
}
var val = 5;
increment(val);
alert(val);
</script>
調用遞增函數後,爲什麼全局變量仍然是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