2016-10-23 71 views
2

我寫了一個for-loop,由於某種原因拒絕修改一個全局變量。相反,它似乎創建了一個臨時修改的局部變量。我的代碼的精簡版本如下。for循環沒有修改全局變量?

var clubsArray = [obj, obj, obj]; 

//each obj contains a property of "goalsFor" which holds an integer 

var madridTotalGoals = 0; 
var barcaTotalGoals = 0; 

function findTotalGoals(clubsArray, totalGoals) { 

    for(var i = 0; i < clubsArray.length; i++) { 

     totalGoals += clubsArray[i].goalsFor; 
    } 
} 

findTotalGoals(clubsArray, barcaTotalGoals); 

// this loops properly and does the math, but it never changes the value of barcaTotalGoals 

在完整的代碼中有很多數組包含「俱樂部」對象;每個都包含一個屬性關鍵字「goalsFor」,其中包含一個整數作爲值。在全球範圍內還有許多「總目標」變量(這裏指定了兩個)。

有誰知道爲什麼全局變量(例如barcaTotalGoals)在通過此函數時未被修改?當我控制檯記錄這個循環的每一步時,數學正在發生,但結果沒有被存儲。我很抱歉,如果這之前已經問過,但我已經徹底搜查。

+1

JavaScript是通過值。 'totalGoals'獲取'barcaTotalGoals'的值,但不會修改它。對「totalGoals」的修改不會改變「barcaTotalGoals」。 – Li357

回答

0

您嘗試通過的變量通過value而不是reference。所以,它不會影響到原始變量

您可以分配值,一旦for循環結束

function findTotalGoals(clubsArray, totalGoals) { 

    for(var i = 0; i < clubsArray.length; i++) { 

     totalGoals += clubsArray[i].goalsFor; 
    } 
    barcaTotalGoals = totalGoals; 
} 
+0

如果有重複,請正確投票。 – Li357

+0

謝謝你的急躁迴應,你不得不在這裏原諒我的無知,但是如果我想用這個函數來修改多個變量(比如說12),我會如何去做,而不必重複12次函數? – roz0n

+0

@AndrewLi這個鏈接肯定會幫助OP理解按值傳遞和引用之間的區別,但是機會是OP甚至不會知道這個問題取決於這個概念,並且不需要對任何在stackoverflow上的新手都非常困難,多數民衆贊成只是我的意見 – Abhinav

0

你是按值傳遞,而不是通過參考... 相反,你可以嘗試這樣的:

clubsArray = [obj, obj, obj]; 

var totalGoals = { 
    madrid: 0, 
    barca: 0 
} 

function goalsByCountry(clubsArray, totalGoalsClub) { 

    for(var i = 0; i < clubsArray.length; i++) { 

     totalGoals[totalGoalsClub] += clubsArray[i].goalsFor; 

    } 

} 

goalsByTeam(clubsArray, 'barca');