拉莫斯之舞
2023-08-24 18:24:45
我有一個全局變量號,因此它獲得了一個函數的傳遞,但是當它完成時,它應該在函數內部更改該變量并將其傳遞到外部全局變量進行更新。因此,它繼續使用舊的全局變量,而其他一切都在更新并變得更大。var P_Level = 1var E_Level = 1var P_Current = 0var P_Max = 100function P_EXP_Gain(exp) { console.log('P_Max1 is '+P_Max) console.log('P_Current1 is '+P_Current) console.log('P_Level1 is '+P_Level) console.log("") if (exp == undefined || null) { P_Current = (E_Level * 20) + P_Current P_Max = P_Max P_Experience(P_Current, P_Max) } else { P_Current = ((E_Level * 20) + exp) + P_Current P_Max = P_Max console.log('P_Max2 is '+P_Max) console.log('P_Current2 is '+P_Current) console.log('P_Level2 is '+P_Level) console.log("") P_Experience(P_Current, P_Max) }}function P_Experience(P_Current, P_Max) { while (P_Current >= P_Max) { P_Level++ // There is a hidden error that causes one to gain perm level up every time they level up via normal way. P_Current = P_Current - P_Max P_Max = P_Level * 100 console.log("") console.log('P_Max3 is '+P_Max) console.log('P_Current3 is '+P_Current) console.log('P_Level3 is '+P_Level) console.log("") alert('Level Up') }}P_EXP_Gain(80)P_EXP_Gain(80) // notice that current random get extra 100P_EXP_Gain(80)您可以通過 console.log 看到,在 while 循環之前,它的 P_Max 始終為 100,但在那之后,它會正確更改,但該更改永遠不會更新為全局 P_Max。我還注意到,在第一個 P_EXP_Gain 之后,在考慮增益之前,函數第一部分中的 P_current 將增加 100。我不知道為什么會發生這種情況。我是不是數學哪里搞錯了?https://jsfiddle.net/Necrorifter/Lc18tobw/9/
2 回答

慕碼人8056858
TA貢獻1803條經驗 獲得超6個贊
我認為您的函數正在使用傳遞給函數的參數而不是全局變量。您可以重命名參數,它應該可以工作。
function P_Experience(P_Current_param, P_Max_param) {
while (P_Current >= P_Max) {
P_Level++ // There is a hidden error that causes one to gain perm level up every time they level up via normal way.
P_Current = P_Current - P_Max
P_Max = P_Level * 100
console.log("")
console.log('P_Max3 is '+P_Max)
console.log('P_Current3 is '+P_Current)
console.log('P_Level3 is '+P_Level)
console.log("")
alert('Level Up')
}
如果您絕對需要參數,也許像這樣。如果你不需要它們,你可以在你的函數中使用全局變量而不傳遞它們
添加回答
舉報
0/150
提交
取消